当前位置:  开发笔记 > 编程语言 > 正文

Java Connection.close是否会回滚?

如何解决《JavaConnection.close是否会回滚?》经验,为你挑选了4个好方法。

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方法之前尝试提交或回滚.否则结果是实现定义的.



1> Joel..:

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



2> Paul Tomblin..:

在我使用的任何数据库系统中,在提交之后立即执行回滚没有任何害处,所以如果你在try块中提交,并在finally中回滚,事情就会被提交,而如果异常或提前返回会导致如果错过了提交,则回滚将回滚事务.所以安全的事情是

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

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



3> Mr. Shiny an..:

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



4> lbergnehr..:

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

神谕

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

SQL Server

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

close方法(SQLServerConnection)

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有