技术: JDBC,Weblogic : 12c,Databse : Oracle 12c
我最近将我的weblogic服务器从10g迁移到了12c版本。在12c版本中,以下自动提交参数默认设置为true:
autocommet = true autoCommitSpecComplaint = true
因此,即使调用rollback()方法,也会自动提交所有数据库事务。
在调试java代码之后,我注意到自动提交操作是在执行callableStatement.execute();方法之后执行的。也就是说,在调用rollback()方法之前正在进行自动提交。并且,在执行rollback()方法时,将引发java.sql.SQLException:Could,而不是在异常上自动提交设置的回滚
我在weblogic的Server选项卡上设置了下面的参数。
-Doracle.jdbc.autoComitSpecCompliant=false -Doracle.jdbc.autocommit=false
但没有运气。我仍然面临着这个问题
我读过一些文章,建议使用旧的OJDBC驱动程序,但我不想在Weblogic服务器上使用任何旧的驱动程序
我想重写web逻辑服务器本身的这些参数,.So,请帮助我解决这个问题。
发布于 2020-11-11 08:58:24
如果希望能够回滚数据库事务,则必须禁用自动提交,否则所有DML查询都将立即提交。要禁用自动提交,请确保在服务器启动期间设置了以下属性(它是JVM系统属性):
-Doracle.jdbc.autoCommit=false
(请注意大写C)
如果您一直收到此错误:
java.sql.SQLException:无法在设置为自动提交的情况下提交
或者回滚的情况
java.sql.SQLException:无法将自动提交设置为回滚
那么您仍然处于自动提交模式。
只有当不能禁用自动提交并且代码仍然显式地调用提交或回滚(<-这将是一个bug)时,属性oracle.jdbc.autoCommitSpecCompliant
才能真正使用。
https://stackoverflow.com/questions/64666802
复制相似问题