Java Connection.close 是否回滚?

2022-09-02 23:14:56

Java Connection.close 是否回滚到最终的块中?.

我知道.Net SqlConnection.close做到了。

有了这个,我可以尝试/最终块没有抓住...

例:

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.close();
}

答案 1

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


答案 2

在我使用过的任何数据库系统中,在提交后立即执行回滚都没有害处,因此,如果您在 try 块中提交,并在最后进行回滚,则事情会被提交,而如果异常或早期返回导致错过提交,则回滚将回滚事务。所以安全的事情是

try {
    conn.setAutoCommit(false);
    ResultSet rs = executeQuery(conn, ...);
    ....
    executeNonQuery(conn, ...);
    ....

    conn.commit();
} finally {
   conn.rollback();
   conn.close();
}

推荐