2014-06-22 81 views
0

我想批量更新查詢但是每個更新查詢是不同的,但運行在同一張表上。 Where子句是相同的。使用彈簧批量更新

例如:

表:列A,B,C,d,ID

update A where ID=1 
update B,C where ID=1 
update D,B where ID=1 and so on ... (all the combinations of A,B,C,D) 

我已經研究了彈簧JDBC(的JdbcTemplate和JDBCNamedParameter)和QueryDsl但其不可能有這樣的更新。

有沒有其他方法可以像批處理一樣進行更新?我堅持Spring-JDBC。

回答

0

你想使用一個準備好的語句傳遞每個更新的參數嗎?如果是這樣,這是不可能的批量。您可以批量處理多個語句,但是您必須創建這些語句而不使用參數的佔位符。在這種情況下,您可以使用int[] JdbcTemplate.batchUpdate(String[] sql)方法(http://docs.spring.io/spring/docs/4.0.3.RELEASE/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html#batchUpdate-java.lang.String:A-)。

無法使用JDBC API對不同的預處理語句進行批處理。您可以批處理不帶參數的個別語句(http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#addBatch(java.lang.String))或爲預準備語句(http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#addBatch())批量多組參數,但是對於所有參數集合,SQL語句必須相同。

您仍然可以在事務中包裝多個更新調用,但會有多次往返數據庫服務器。

0

你可以使用存儲過程包裝你的更新,然後你可以批量往返數據庫。

在存儲過程中,您需要根據傳入的參數生成更新。因此,您可以測試null,或者爲每列傳遞一個單獨的標誌。如果該標誌已設置,則生成更新該列的SQL。