我有一个使用MERGE语句创建的更新/插入SQL查询。使用JdbcTemplate或NamedParameterJdbcTemplate,Spring是否提供一种可用来更新单个记录而不是批处理更新的方法?
由于此查询将用于通过JMS侦听器保留队列中的数据,因此我一次仅使一个记录出队,而无需进行批处理更新。
如果批处理是通过Spring JDBC进行处理的唯一方法,那很好...我只是想确保我没有错过一些简单的事情。
答案 0 :(得分:1)
您只能使用包含参数的单行查询来使用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}"
答案 1 :(得分:1)
只需使用Range("A9:BF9").AutoFilter field:=55, Criteria1:=">0", Operator:=xlAnd, Criteria2:="<0"
方法之一,例如,使用以下方法之一:JdbcTemplate#update而不是BatchUpdate。
update
更新一条记录,Update
使用JDBC批处理更新多条记录