Ant*_*io 15 java database-connection transactions
Java Connection.close是否会回滚到finally块?
我知道.Net SqlConnection.close做到了.
有了这个,我可以在没有捕获的情况下制作try/finally块...
例:
try {
conn.setAutoCommit(false);
ResultSet rs = executeQuery(conn, ...);
....
executeNonQuery(conn, ...);
....
conn.commit();
} finally {
conn.close();
}
Run Code Online (Sandbox Code Playgroud)
在我使用的任何数据库系统中,在提交之后立即执行回滚没有任何害处,所以如果你在try块中提交,并在finally中回滚,事情就会被提交,而如果异常或提前返回会导致如果错过了提交,则回滚将回滚事务.所以安全的事情是
try {
conn.setAutoCommit(false);
ResultSet rs = executeQuery(conn, ...);
....
executeNonQuery(conn, ...);
....
conn.commit();
} finally {
conn.rollback();
conn.close();
}
Run Code Online (Sandbox Code Playgroud)
不同数据库之间的行为完全不同.例子:
在使用开放事务关闭连接时提交事务(如@Mr.Shiny和New安宇所述.
在事务中间调用close方法会导致事务回滚.
| 归档时间: |
|
| 查看次数: |
16398 次 |
| 最近记录: |