Java Connection.close是否回滚?
Java Connection.close是否回滚到finally块 我知道.Net SqlConnection.close可以做到这一点 有了这个,我可以尝试/最终不被捕获地阻塞 例如:Java Connection.close是否回滚?,java,transactions,database-connection,Java,Transactions,Database Connection,Java Connection.close是否回滚到finally块 我知道.Net SqlConnection.close可以做到这一点 有了这个,我可以尝试/最终不被捕获地阻塞 例如: try { conn.setAutoCommit(false); ResultSet rs = executeQuery(conn, ...); .... executeNonQuery(conn, ...); .... conn.commit(); } fi
try {
conn.setAutoCommit(false);
ResultSet rs = executeQuery(conn, ...);
....
executeNonQuery(conn, ...);
....
conn.commit();
} finally {
conn.close();
}
根据,在调用close方法之前,应该尝试提交或回滚。否则,结果是由实现定义的。如果您打算编写多平台JDBC代码,则不应依赖此行为。在我使用过的任何数据库系统中,在提交后立即回滚都没有坏处,因此如果您在try块中提交,并在finally中回滚,则会提交内容,然而,如果异常或提前返回导致错过提交,则回滚将回滚事务。所以安全的做法是
try {
conn.setAutoCommit(false);
ResultSet rs = executeQuery(conn, ...);
....
executeNonQuery(conn, ...);
....
conn.commit();
} finally {
conn.rollback();
conn.close();
}
在finally块中回滚是无用的。在您提交之后,并且提交成功,为什么要回滚?所以如果我是你,我会在接球区打滚 不同数据库之间的行为完全不同。示例: 神谕 在使用打开的事务关闭连接时提交事务(如@Mr.shinny and New)安宇 声明 SQL Server
在事务的中间调用关闭方法导致 要回滚的事务
对于MySQL JDBC,如果在关闭连接时没有调用提交或回滚方法,则实现将回滚连接。如果我没有弄错,SQL Server将对此进行投诉。这不是无用的。如果在提交()之前发生异常但是在当前事务中成功执行之后,您很可能希望在退出具有连接访问权限的块之前回滚该事务。