我必须检查一位同事的代码,我偶然发现了这段代码:
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();
的跟踪
我想知道如果没有提交它是如何工作的 - 有人可以解释为什么吗?
答案 0 :(得分:3)
正如here所述,JDBC驱动程序通常使用自动提交,您可以通过JPA中的showSQL
或generateDDL
等特定于DBMS驱动程序的设置启用数据库跟踪。
启用手动事务支持而不是自动提交模式 JDBC驱动程序默认使用,使用Connection对象 setAutoCommit()方法。如果将boolean false传递给setAutoCommit( ),你关闭自动提交。您可以传递一个布尔值true来转动它 再回来。
答案 1 :(得分:1)
如果您将连接对象的自动提交设置为false,那么我们必须手动提交事务
connection.setAutoCommit(false);
// your code goes here
connection.commit();
如果您没有设置自动提交,则默认其值为true,并且它将提交每条记录