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