簡體   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