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

sta*_*aru 5 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();
Run Code Online (Sandbox Code Playgroud)

代码工作,更新正确完成,但我找不到一个connection.commit(); 我不知道它如何工作没有提交的痕迹- 有人可以解释为什么?

spe*_*izt 3

如此处所述,JDBC 驱动程序通常使用自动提交,您可以通过 DBMS 驱动程序特定设置(例如 JPA 中的showSQL或)启用数据库跟踪generateDDL

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