我刚刚升级到新的jdbc驱动程序,从driver 12.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
我的应用程序仍然在12.jar类中正常运行。
我研究甲骨文:
对于下列任何一种情况,都会引发此例外:
但我在消息来源中找不到错误。请帮我解释一下这个错误。
发布于 2014-11-26 13:45:42
最新的OJDBC驱动程序比其他地方的驱动程序更兼容。对于遗留代码,可以关闭此行为:
-Doracle.jdbc.autoCommitSpecCompliant=false
这是JVM选项。
发布于 2017-01-21 09:04:39
当使用Oracle驱动程序(ojdbc6.jar)版本12或更高版本时,会发生这种异常。版本12和更高版本的驱动程序比以前的驱动程序版本更严格。
你可以解决这个问题,你没有什么选择:
发布于 2019-08-27 08:42:00
根本原因-
PhysicalConnector.java in ojdbc6
public void commit(int paramInt) throws SQLException {
disallowGlobalTxnMode(114);
if (this.lifecycle != 1) {
SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);
sQLException.fillInStackTrace();
throw sQLException;
}
.
.
PhysicalConnector.java in ojdbc7
public void commit(int paramInt) throws SQLException {
disallowGlobalTxnMode(114);
if (this.autoCommitSpecCompliant && getAutoCommit()) {
throw (SQLException)DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 273).fillInStackTrace();
}
if (this.lifecycle != 1) {
SQLException sQLException = DatabaseError.createSqlException(getConnectionDuringExceptionHandling(), 8);
sQLException.fillInStackTrace();
throw sQLException;
}
.
.
我们可以看到,在ojdbc7中,已经引入了一些代码。如果autoCommitSpecCompliant
和getAutoCommit()
都是真的话,我们就会异常。
有两种解决办法-
-Doracle.jdbc.autoCommitSpecCompliant=false
connection.commit()
前的connection.setAutoCommit(false);
https://stackoverflow.com/questions/23953534
复制相似问题