使用Spring批量更新

时间:2014-06-22 15:41:22

标签: spring jdbc spring-jdbc jdbctemplate

我正在尝试批量更新查询但是每个更新查询都不同但在同一个表上运行。 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) 

我已经调查了spring jdbc(JDBCTemplate和JDBCNamedParameter)和QueryDsl,但它不可能有这样的更新。

是否有其他方法可以批量更新?我坚持使用Spring-JDBC。

2 个答案:

答案 0 :(得分: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语句必须对所有参数集都相同。

您仍然可以在事务中包装多个更新调用,但是数据库服务器会有多个往返。

答案 1 :(得分:0)

您可以使用存储过程包装更新,然后批量往返数据库。

在存储过程中,您需要根据传入的参数生成更新。因此,您可以测试null,或为每列传递单独的标志。如果设置了该标志,则生成更新该列的SQL。