1

我有多个准备好的陈述。我需要为每条语句执行“connection.commit”还是在最后一条语句之后只调用一次?

Connection connection = datasource.getConnect();
connection.setAutoCommit(false);
PreparedStatement pstmt1 = connection.prepareStatement(query1);
pstmt1.executeUpdate();
connection.commit();

PreparedStatement pstmt2 = connection.prepareStatement(query2);
pstmt2.executeUpdate();
connection.commit();

PreparedStatement pstmt3 = connection.prepareStatement(query3);
pstmt3.executeUpdate();
connection.commit();


Or

Connection connection = datasource.getConnect();
connection.setAutoCommit(false);
PreparedStatement pstmt1 = connection.prepareStatement(query1);
pstmt1.executeUpdate();

PreparedStatement pstmt2 = connection.prepareStatement(query2);
pstmt2.executeUpdate();

PreparedStatement pstmt3 = connection.prepareStatement(query3);
pstmt3.executeUpdate();

connection.commit();

谢谢。

4

1 回答 1

5

如果您设置autocommit = false,那么您可以选择何时提交事务。在哪里做得最好,只有你可以判断,因为它取决于原子性、事务隔离等。

这就是将 autoCommit 属性公开给您(“最终用户”)的全部意义,因此您可以控制更改如何相互关联/相互依赖。

不能做的(我很确定——自从我直接在 JDBC 中编程已经有一段时间了)是发出 2 个提交命令,中间没有任何其他命令。

于 2012-10-01T15:21:34.957 回答