繁体   English   中英

如何在Spring JDBC中使用MERGE语句插入/更新单个记录

[英]How to insert/update a single record using a MERGE statement with Spring JDBC

我有一个使用MERGE语句创建的更新/插入SQL查询。 使用JdbcTemplate或NamedParameterJdbcTemplate,Spring是否提供一种可以用来更新单个记录而不是批处理更新的方法?

由于此查询将用于通过JMS侦听器保留来自队列的数据,因此我一次仅使一个记录出队,而无需进行批处理更新。

如果批处理是通过Spring JDBC进行处理的唯一方法,那很好。。。我只是想确保自己没有简单的东西。

您只能使用包含参数的单行查询来使用SQL MERGE语句。

例如,如果您有一个表COMPANY包含ID作为键,而NAME作为属性,则MERGE语句将为:

merge into company c
using (select ? id, ? name from dual) d
on (c.id = d.id)
when matched then update 
   set c.name = d.name
when not matched then insert (c.id, c.name)
   values(d.id, d.name)

如果目标表包含参数化的键,则name将被更新,否则将插入新记录。

通过JDBCTemplate,您可以使用update方法来调用MERGE语句,如下所示(使用Groovy脚本)

def id = 1
def name = 'NewName'

String mergeStmt = """merge into company c
using (select ? id, ? name from dual) d
on (c.id = d.id)
when matched then update 
   set c.name = d.name
when not matched then insert (c.id, c.name)
   values(d.id, d.name)""";

def updCnt = jdbcTemplate.update(mergeStmt, id, name);

println "merging ${id}, name ${name}, merged rows ${updCnt}" 

只需使用一种update方法,例如以下一种: JdbcTemplate#update而不是BatchUpdate。
Update更新单个记录, batchUpdate使用JDBC批处理更新多个记录

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM