有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

事务不支持Java连接。关闭回滚?

没有Java连接。关闭回滚到最后一个块

我知道。Net SqlConnection。close做到了

有了这个,我可以尝试/最终成功拦截而不被捕获

例如:

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

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

共 (6) 个答案

  1. # 1 楼答案

    不同数据库之间的行为完全不同。例如:

    甲骨文

    当使用打开的事务(如@Mr.Shinny and New)关闭连接时,事务被提交安宇 声明

    SQL Server

    Calling the close method in the middle of a transaction causes the transaction to be rolled back.

    close Method (SQLServerConnection)

  2. # 2 楼答案

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

  3. # 3 楼答案

    对于MySQL JDBC,如果关闭连接,则实现会回滚连接,而不需要调用提交或回滚方法

  4. # 4 楼答案

    在最后一个区块中回滚是没有用的。在你承诺之后,并且承诺成功了,为什么要回滚?所以如果我是你,我会在接球区打滚

  5. # 5 楼答案

    在我使用过的任何数据库系统中,在提交后立即回滚都没有坏处,因此如果在try块中提交,在finally块中回滚,则会提交内容,而如果异常或提前返回导致提交丢失,回滚将回滚事务。所以安全的做法是

    try {
        conn.setAutoCommit(false);
        ResultSet rs = executeQuery(conn, ...);
        ....
        executeNonQuery(conn, ...);
        ....
    
        conn.commit();
    } finally {
       conn.rollback();
       conn.close();
    }