在executeBatch()之后需要connection.commit()吗?

时间:2014-11-12 13:34:26

标签: java prepared-statement

我必须检查一位同事的代码,我偶然发现了这段代码:

private void pdate(JdbcTemplate jdbcTemplate, List<Long> saisineIdsToUpdate,Connection connection) throws SQLException {
    String sqlUpdate = "UPDATE SAISINES SAI WHERE SAI.IDSAISINE = ?"; //request simplified

    PreparedStatement psUpdate = connection.prepareStatement(sqlUpdate);

    for (Long saisineId : saisineIdsToUpdate) {
        psUpdate.setLong(1, saisineId );
        psUpdate.addBatch();

    }
    psUpdate.executeBatch();
    psUpdate.close();

代码有效,更新正确完成,但我找不到connection.commit();的跟踪 我想知道如果没有提交它是如何工作的 - 有人可以解释为什么吗?

2 个答案:

答案 0 :(得分:3)

正如here所述,JDBC驱动程序通常使用自动提交,您可以通过JPA中的showSQLgenerateDDL等特定于DBMS驱动程序的设置启用数据库跟踪。

  

启用手动事务支持而不是自动提交模式   JDBC驱动程序默认使用,使用Connection对象   setAutoCommit()方法。如果将boolean false传递给setAutoCommit(   ),你关闭自动提交。您可以传递一个布尔值true来转动它   再回来。

答案 1 :(得分:1)

如果您将连接对象的自动提交设置为false,那么我们必须手动提交事务

connection.setAutoCommit(false);
// your code goes here
connection.commit();

如果您没有设置自动提交,则默认其值为true,并且它将提交每条记录