我正在尝试批量更新查询,但是每个更新查询都是不同的,但是运行在同一个表上。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。
发布于 2014-06-24 22:26:24
是否要使用为每个更新传递参数的预准备语句?如果是这样,则不可能以批处理的形式完成此操作。您可以批处理多个语句,但随后必须在不使用占位符作为参数的情况下创建这些语句。在此场景中,您将使用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语句必须相同。
您仍然可以在一个事务中包装多个更新调用,但会有多个到数据库服务器的往返。
发布于 2014-06-24 23:43:17
您可以使用存储的proc包装您的更新,然后您可以批量往返到数据库。
在存储的proc中,您需要根据传入的参数生成更新。因此,您可以测试null,或者为每列传递一个单独的标志。如果设置了该标志,则生成更新该列的SQL。
https://stackoverflow.com/questions/24352867
复制相似问题