java - 何时回滚 jdbc 事务

标签 java jdbc transactions

我在 http://download.oracle.com/javase/tutorial/jdbc/basics/transactions.html 中读到了一个有趣的声明

有趣的部分是:

“捕获 SQLException 会告诉您出现了问题,但它不会告诉您已提交或未提交什么。由于您不能指望没有提交任何内容,因此调用方法回滚是确定的唯一方法。”

真的是这样吗?如果我不调用 commit 但收到 SQLException,那么我不能指望没有提交任何内容吗?如果我的程序退出时没有调用提交或回滚怎么办?我以为交易会自动为我回滚,但这个声明消除了我的确定性。

最佳答案

基本上,您考虑在其默认隔离级别中使用的任何现代数据库都不会表现出这种行为。但最终,下面发生的事情超出了 JDBC 的控制范围,而且它知道您可能正在使用 Informix 5 或 1988 年的 Sybase,其底层有一个适配器层。

因此,从高级语言API规范的角度来看,他们必须声明,如果你不正确使用它,则没有任何保证。基本上,它是说,如果放弃既没有提交也没有回滚的连接的结果导致一些执行的语句显示在数据库级别,那么它不会被视为 JDBC 级别的错误。 (通常对于大多数数据库,我们会在数据库级别考虑该错误,但同样,JDBC 是一个高级 API。)

关于java - 何时回滚 jdbc 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630364/

相关文章:

java - 带有 jdbc 的 Spring Security 3.0

java - 客户端异常关闭时Oracle Activity session 状态

c# - 如何在 C# 中保存文件和在数据库中插入记录之间创建 Transactionscope

transactions - 对 ARQC 、 TC 、 AAC 和第二张卡操作分析的澄清

php - MySQLi insert_id 事务后返回0

java - 如何从另一个布局设置按钮监听器?

java - 尝试创建一种在 Android Java 中格式化十六进制字符串的方法

java - 值列表中无法识别的标记 '(',应为 ')'

java - JMX 线程未关闭

Java - SCP 后 "ü/ä/ö"的问题