java.sql.SQLException: 无法在 oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:4443)

2022-09-02 12:14:39

我刚刚从class12.jar升级到新的jdbc驱动程序到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

我的应用仍然在类12.jar中正常运行。

我在预言机上研究了:

对于以下任一情况,都会引发此异常:

  • 当自动提交状态设置为 true 并调用提交或回滚方法时
  • 当自动提交的默认状态未更改并调用提交或回滚方法时
  • 当 COMMIT_ON_ACCEPT_CHANGES 属性的值为 true 并且在对行集调用 acceptChanges 方法后调用提交或回滚方法时

但是我无法在我的来源中找到错误。请帮我给出更多关于这个错误的解释。


答案 1

最新的 OJDBC 驱动程序比它们更符合要求。您可以为旧代码关闭此行为:

-Doracle.jdbc.autoCommitSpecCompliant=false

这是一个JVM选项。


答案 2

当使用 Oracle JDBC 驱动程序 (ojdbc6.jar) 版本 12 或更高版本时,会发生这种异常。驱动程序的版本 12 及更高版本比早期的驱动程序版本更严格。

你可以解决问题,你有几个选择:

  1. 将 jar 文件更改为旧版本。(低于 12;迁移到新服务器时通常会出现问题)
  2. 覆盖新 jar 版本 (ojdbc6.jar) 的行为,设置低于 JVM 参数。

    -Doracle.jdbc.autoCommitSpecCompliant=false

    IBM WAS 用户,请参阅此链接

  3. 在 Java/SQL 中关闭自动提交:

    爪哇岛:

    conn.setAutoCommit(false);

    神谕:

    将自动提交设置为关闭


推荐