Java Connection.close是否会回滚?

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)

Joe*_*oel 25

根据javadoc,您应该在调用close方法之前尝试提交或回滚.否则结果是实现定义的.


Pau*_*lin 9

在我使用的任何数据库系统中,在提交之后立即执行回滚没有任何害处,所以如果你在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.*_* 安宇 6

Oracle的JDBC驱动程序默认提交close(). 如果您打算编写多平台JDBC代码,则不应该依赖此行为.


lbe*_*ehr 5

不同数据库之间的行为完全不同.例子:

神谕

在使用开放事务关闭连接时提交事务(如@Mr.Shiny和New安宇所述.

SQL Server

在事务中间调用close方法会导致事务回滚.

close方法(SQLServerConnection)