我可以使用 MERGE INTO 来模拟 Apache Derby 中的“upsert”吗?

2023-11-27

我们正在使用 Derby 并且有很多代码,如下所示:

try (ResultSet rs = executeQuery(...)) {
    if (rs.next()) {
        updateRowSet(rs, ...);
        rs.updateRow();
    } else {
        executeUpdate(...);
    }
}

过去,我们正在寻找一种在服务器端执行此逻辑的方法,并发现某些数据库支持“upsert”(更新或插入)操作。德比有一个功能请求MERGE INTO这被认为是执行此操作的 SQL:2003 标准方法,因此我们坐下来观看票证,很长一段时间过去了。

德比10.11终于添加了MERGE INTO。还没有人有时间仔细阅读并更新代码来使用它,但是在阅读他们的文档时,他们的所有示例都显示了从一个表合并到另一个表的情况。但是等一下,我们的数据还没有在表中!

我知道我可以put它在一个表中,但随后又是多个查询,这完全失去了使用它的意义。

我确信可以做到without将其放入表格中,但由于文档没有显示单个示例,因此我不确定如何继续。

这是我一直在尝试的:

try (PreparedStatement ps = connection.prepareStatement(
        "MERGE INTO things AS target " +
        // Awkward point 1:
        // It wants a "source" table, but I don't have one.
        // So I thought I would try to use the same table with
        // another name.
        "  USING things AS source ON target.id = ?" +
        "  WHEN MATCHED THEN" +
        "    UPDATE SET data = ?" +
        "  WHEN NOT MATCHED THEN" +
        "    INSERT (id, data) VALUES (??, ?)"))
{
    ps.setLong(1, id);
    ps.setBinaryStream(2, data);
    ps.setLong(3, id);
    // Awkward point 2:
    // Passing an InputStream into a query as two
    // parameters.
    ps.setBinaryStream(4, data);
    ps.execute();
}

这似乎没有执行任何插入,但也没有给出错误,所以我绝对没有什么可继续的。


分享给所有仍然使用德比的悲伤的人:) 所以我在帮助下解决了这个问题merge into statement( https://db.apache.org/derby/docs/10.14/ref/rrefsqljmerge.html) 以这种方式:

MERGE INTO foo
USING SYSIBM.SYSDUMMY1
ON foo.id = '1' AND foo.language = 'en'
WHEN MATCHED THEN
  UPDATE SET name = 'name2', image = 'someImgUrl2'
WHEN NOT MATCHED THEN
  INSERT (id, name, language, image)
  VALUES ('1', 'name1', 'en', 'someImgUrl1')

其中 foo 是您要更新插入行的表,并且SYSIBM.SYSDUMMY1德比虚拟表只有 1 个无用行(顺便说一句,它不适用于我的具有多行的常规表之一)

正如您可能理解的那样,这更像是解决方法,但比没有实现更新插入目标要好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用 MERGE INTO 来模拟 Apache Derby 中的“upsert”吗? 的相关文章

  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • SQL Server 相当于 MySQL 的 USING

    在 MySQL 中 当您连接不同表中具有相同名称的列时 可以在连接中使用关键字 USING 例如 这些查询产生相同的结果 SELECT FROM user INNER JOIN perm USING uid SELECT FROM user
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • 如何通过循环变量在 dbt 中多次运行 SQL 模型?

    我有一个 dbt 模型 测试模型 接受地理变量 zip state region 在配置中 我想通过循环变量来运行模型三次 每次使用不同的变量运行它 问题是 我有一个如下所示的宏 它将变量附加到输出表名称的末尾 即运行测试模型 with z
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • SQL Group BY,每个组的前 N ​​个项目

    我有一个 SQL 查询 可以获取给定商店中销量最高的 5 件商品 SELECT TOP 5 S UPCCode SUM TotalDollarSales FROM Sales S WHERE S StoreId 1 GROUP BY S U
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 阻止 OSX 变音符号为所有用户禁用 Java 中的 KeyBindings?

    注 我知道这个问题 https stackoverflow com questions 40335285 java keybinds stop working after holding down a key用户必须输入终端命令才能解决此问
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • 如何在动态查询中将行值连接到列名

    我正在开发一个允许配置问题和答案的应用程序 目前最多可以有 20 个答案 但也可能更少 我的结构如下 问题 ID FormId QuestionText AnswerField 1 1 Name Answer01 2 1 Address A
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • foo.bar() 和 bar(foo) 之间的区别?

    考虑 class Parent def init self last name eye color self last name last name self eye color eye color def show info self p
  • GWT:字符编码变音

    我想在标签中设置文本 labelDemnaechst setText Demn chst f llig 在应用程序的输出中 字符 显示错误 怎样才能很好地展示它们呢 GWT 假设所有源文件都以 UTF 8 编码 这就是为什么你会看到l sc
  • 在复制初始化中,对复制构造函数的调用是显式的还是隐式的?

    class AAA public explicit AAA const AAA AAA int int main AAA a 1 return 0 在上面的代码中 据我了解 尽管在大多数情况下被省略 但在语义上仍然需要调用复制构造函数 我的
  • 如何在不创建工作区的情况下从 tfs 获取特定版本的文件夹?

    我想在特定时间获取项目的源代码 变更集 所以我需要下载整个文件夹 我想在不同的时间执行此操作 并且处理不同的工作空间不是很方便 我知道关于TFS 将特定版本获取到单独的文件夹中 带工作区 和需要命令在没有工作区的情况下从 TFS 获取文件
  • 在 WPF 中绘制 3D 线条

    我正在开发 CAD 应用程序 并考虑使用 WPF 来渲染我的实体 但WPF似乎不支持绘制3D线条 有没有办法在WPF中绘制3D线条 我不喜欢为我需要绘制的每个线实体创建一个网格 因为我担心这会给我带来重大的性能问题 因为我必须在我的应用程序
  • 如何在Spring MVC中的@controllerAdvice或@RestControllerAdvice中查找控制器名称?

    ControllerAdvice public class GlobalExceptionHandler ExceptionHandler NoHandlerFoundException class public ResponseEntit
  • Bjarne Stroustrup 说我们必须避免链表

    我在 YouTube 上看到了这个视频 https www youtube com watch v YQs6IC vgmoBjarne 表示最好使用向量 而不是链表 我无法理解整个事情 所以有人可以用通俗的语言解释他在说什么吗 P S 我是
  • 如何使用 IBOutletCollection 将多个 UIImageView 连接到同一个插座?

    我有 10 个 UIImageViews 做同样的事情 它们有一些用计时器改变图像的 void 方法 我的 UIImageView 是一个插座 我想将所有 10 个 imageView 连接到同一个插座 但界面生成器不允许我这样做 我发现有
  • 如何修复 Plesk 中的 FastCGI 超时问题?

    PHP 支持当前设置为 作为 Fast CGI 运行 我的服务器日志中不断收到这些错误 mod fcgid 45秒内读取数据超时 脚本标头过早结束 index php 我认为应该快速修复 但我找不到要编辑的文件 这是我可以从 Plesk 更
  • firebase Analytics:Android 应用程序卸载统计信息

    我安装了 Firebase SDK 并将以下两行添加到 MainActivity java private FirebaseAnalytics mFirebaseAnalytics mFirebaseAnalytics FirebaseAn
  • html 正文小于其内容

    这是一个基本的插图问题的
  • 在 R 图中的 x 轴下方添加箭头

    我正在尝试在 R 图中的 x 轴下方添加标记特定 x 坐标的箭头 我的 x 轴位于 y 0 并且当我尝试在中使用负 y 坐标时arrows 因此箭头将垂直于 x 轴 我只绘制了箭头的边缘 尽管有一些空间 例如绘制 x 轴标签和刻度线的位置
  • 使用 FullAjaxExceptionHandler 时 h:body 不会重新渲染

    我正在使用 OmniFacesFullAjaxExceptionHandler显示错误页面 错误页面显示正确 但我在这些页面的样式方面遇到问题 我的应用程序使用的模板在 body 元素上定义了 CSS 类 这些类对于正常页面和错误页面是不同
  • Struts 中的控制器

    MVC 中的控制器是什么 Is it struts xml or Servlet 动作类 我们可以有多个吗Controller在我们的应用程序中 拥有多个控制器是一种好的做法吗 在 Struts 中 应用程序控制器层代码 功能分为两部分 A
  • Ruby 中的每个方法和收集方法有什么不同[重复]

    这个问题在这里已经有答案了 从这段代码我不知道这两种方法之间的区别 collect and each a L Z J collect x puts x succ gt M AA K print a class gt Array b L Z
  • 文本块的数据触发器

    我有一个 Textblock 如果属性为 True 或 False 我会尝试更改 Text 属性的值 我遇到的问题是 该标志可能会在屏幕上的不同事件 来自其他组合框的 onchange 事件 上更改 我不确定如何让这个数据触发器工作 因为我
  • 如何在 Windows 中为 Google Chrome 创建 PPAPI 插件?

    我是 PPAPI 开发的新手 并且已经从以下位置下载了已经的示例here 然而 即使在遇到了文档 我无法构建该项目 我有 Microsoft Visual Studio 2010 Windows 操作系统和 Chrome 30 0 1599
  • 在线 Node.js 服务器

    Node js 是否足够成熟 可以在其中构建整个 Web 应用程序 我的意思是完全在 Node js 中 我在某处读到 出于某种原因 Node js 后面应该有 例如 nginx 这是真的吗 Node js 不能独立存在吗 有没有基于 No
  • MongoDB 计数集合 Node.js

    我正在尝试通过 Node js 与 MongoDB 交互 但在使用 count 方法时遇到了一些问题 我在用节点 mongodb native看起来我正在做的事情应该有效 我的代码示例 var get total num docs func
  • 我可以使用 MERGE INTO 来模拟 Apache Derby 中的“upsert”吗?

    我们正在使用 Derby 并且有很多代码 如下所示 try ResultSet rs executeQuery if rs next updateRowSet rs rs updateRow else executeUpdate 过去 我们