Java Connection.close是否会回滚到finally块?
我知道.Net SqlConnection.close做到了.
有了这个,我可以在没有捕获的情况下制作try/finally块...
例:
try { conn.setAutoCommit(false); ResultSet rs = executeQuery(conn, ...); .... executeNonQuery(conn, ...); .... conn.commit(); } finally { conn.close(); }
Joel.. 25
根据javadoc,您应该在调用close方法之前尝试提交或回滚.否则结果是实现定义的.
根据javadoc,您应该在调用close方法之前尝试提交或回滚.否则结果是实现定义的.
在我使用的任何数据库系统中,在提交之后立即执行回滚没有任何害处,所以如果你在try块中提交,并在finally中回滚,事情就会被提交,而如果异常或提前返回会导致如果错过了提交,则回滚将回滚事务.所以安全的事情是
try { conn.setAutoCommit(false); ResultSet rs = executeQuery(conn, ...); .... executeNonQuery(conn, ...); .... conn.commit(); } finally { conn.rollback(); conn.close(); }
Oracle的JDBC驱动程序默认提交close(). 如果您打算编写多平台JDBC代码,则不应该依赖此行为.
不同数据库之间的行为完全不同.例子:
在使用开放事务关闭连接时提交事务(如@Mr.Shiny和New安宇所述.
在事务中间调用close方法会导致事务回滚.
close方法(SQLServerConnection)