【问题标题】:Batch update using Spring使用 Spring 批量更新
【发布时间】:2014-06-22 15:41:21
【问题描述】:

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

【问题讨论】:

    标签: spring jdbc spring-jdbc jdbctemplate


    【解决方案1】:

    您想使用准备好的语句来传递每次更新的参数吗?如果是这样,则无法批量执行此操作。您可以批处理多个语句,但是您必须在不使用占位符的情况下创建这些语句作为参数。在这种情况下,您将使用 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 语句必须相同。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 2013-07-11
        • 2019-05-02
        • 2018-02-17
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多