是否可以通过 JDBC 确定我处于未提交的 Activity 事务中? 我想确保在 Connection.close() 之前所有事务都已提交或回滚。
最佳答案
没有标准的 JDBC 方法可以满足您的需求。但是如果你想确保在 Connection.close() 之前所有事务都已提交/回滚,你可以这样做:
Connection conn = null;
try {
conn = ...;
conn.setAutoCommit(false);
// do stuff
// commit only if everything is successful
conn.commit();
}
catch (SomeException e) {
// log exceptions
}
finally {
if (conn != null) {
/* ALWAYS rollback before closing the connection
* if there's any caught/uncaught exception, the transaction will be rolled back
* if everything is successful / commit is successful, the rollback will have no effect
*/
try {
conn.rollback();
}
catch (SQLException e) {}
try {
conn.close();
}
catch (SQLException e) {}
}
}
这比仅在出现异常(在 catch block 中)时回滚要好,因为如果有任何未捕获的异常:
- rollback() 不会被调用
- Connection.close() 将在存在 Activity 事务时调用, Activity 事务发生的情况是特定于实现的。参见 Bogdan Calmac's answer .
关于java - JDBC 确定 Activity 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652612/