我只是从classes12.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
Run Code Online (Sandbox Code Playgroud)
我的应用程序仍然使用classes12.jar正常运行.
我研究过oracle:
针对以下任何一种情况引发此异常:
但我在我的来源中找不到错误.请帮我详细解释一下这个错误.
Ola*_*son 18
最新的OJDBC驱动程序比它们更符合要求.您可以为遗留代码关闭此行为:
-Doracle.jdbc.autoCommitSpecCompliant=false
Run Code Online (Sandbox Code Playgroud)
这是一个JVM选项.
当使用Oracle JDBC驱动程序(ojdbc6.jar)版本12或更高版本时,会发生此类异常.驱动程序的12及更高版本比早期的驱动程序版本更严格.
你可以解决问题,你有几个选择:
使用以下JVM参数设置覆盖新jar版本(ojdbc6.jar)的行为.
-Doracle.jdbc.autoCommitSpecCompliant = FALSE
IBM WAS用户,请参考以下链接:
在Java/SQL中设置自动提交:
Java的:
conn.setAutoCommit(假);
甲骨文:
设置AUTOCOMMIT OFF
ojdbc6 中的 PhysicalConnector.java
\npublic void commit(int paramInt) throws SQLException {\n disallowGlobalTxnMode(114);\n if (this.lifecycle != 1) {\n SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);\n sQLException.fillInStackTrace();\n throw sQLException;\n }\n .\n .\nRun Code Online (Sandbox Code Playgroud)\nojdbc7 中的 PhysicalConnector.java
\npublic void commit(int paramInt) throws SQLException {\n disallowGlobalTxnMode(114);\n \xe2\x80\x8bif (this.autoCommitSpecCompliant && getAutoCommit()) {\n throw (SQLException)DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 273).fillInStackTrace();\n }\n if (this.lifecycle != 1) {\n SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);\n sQLException.fillInStackTrace();\n throw sQLException;\n \xe2\x80\x8b}\n .\n .\nRun Code Online (Sandbox Code Playgroud)\n我们可以看到,在ojdbc7中,已经引入了一段代码。如果autoCommitSpecCompliant两者都getAutoCommit()为真,我们将得到例外。
将 autoCommitSpecCompliant 设置为 false
\n下面要设置的 JVM 参数
\n-Doracle.jdbc.autoCommitSpecCompliant=false
之前插入下面的代码connection.commit()
connection.setAutoCommit(false);
| 归档时间: |
|
| 查看次数: |
48435 次 |
| 最近记录: |