【发布时间】:2014-07-20 03:37:11
【问题描述】:
我只是将新的 jdbc 驱动程序从 classes12.jar 升级到 ojdbc7.jar
我的应用在使用 ojdbc7.jar 运行时抛出异常:
java.sql.SQLException: Could not commit with auto-commit set on
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4443)
at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4490)
at oracle.jdbc.driver.T4CConnection.doSetAutoCommit(T4CConnection.java:943)
at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnection.java:4
我的应用程序仍然使用 classes12.jar 正常运行。
我研究过oracle:
以下任何一种情况都会引发此异常:
- 当自动提交状态设置为 true 并调用提交或回滚方法时
- 当自动提交的默认状态没有改变并且调用了提交或回滚方法时
- 当 COMMIT_ON_ACCEPT_CHANGES 属性的值为 true 并且在对行集调用 acceptChanges 方法后调用提交或回滚方法时
但我在源代码中找不到错误。请帮我解释一下这个错误。
【问题讨论】:
-
尝试设置
connection.setAutoCommit(false); -
确保您使用的是 JDK7:这就是“ojdbc7”中“7”的含义。 classes12.jar 是 JDK 1.2 的老式 - 你应该在几年前就改变了。不要被“我的应用程序仍然使用 classes12.jar 正常运行”所迷惑。你不应该再使用它。
-
鉴于调用堆栈,我怀疑驱动程序中存在错误。在自动提交
true和false之间切换时(反之亦然),驱动程序必须提交活动事务,并且看起来此提交失败,因为驱动程序处于自动提交状态。另一方面,我希望 Oracle 能够彻底测试他们的驱动程序以实现这些基本状态切换。 -
@MarkRotteveel:请看这个问题。 stackoverflow.com/questions/27272317/…我想我的问题和这个帖子有关