我有多个准备好的陈述。我是否需要为每个语句执行'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();
感谢。
答案 0 :(得分:5)
如果设置autocommit = false
,则可以选择提交事务的时间。在最好的情况下,只有你可以判断它取决于原子性,事务隔离等。
这是将autoCommit属性暴露给你,"最终用户"的重点,因此你可以控制变化与彼此之间的关系如何相互依赖。
你无法做什么(我非常确定 - 自从我直接在JDBC中编程以来已经有一段时间了)是问题2提交命令而没有任何其他介于两者之间。