【发布时间】:2021-11-22 01:16:34
【问题描述】:
我们有使用普通 JDBC 连接 Oracle 数据库的旧应用程序。 最近,该数据库已升级到 Oracle 19c。
为此,我们现在使用以下依赖项。
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
升级后,应用程序开始报错,原因很明显,比如在 Callable 之前 Result 没有关闭,在 rollback() 期间等。
我发现以下两种可行的方法。
System.setProperty ("oracle.jdbc.autoCommitSpecCompliant", "false");
或
connection.setAutoCommit(false);
我想知道以上两种解决方案有什么区别,哪一种更好。
【问题讨论】:
-
我不是这方面的专家,但通过阅读提供的链接,我想说你应该使用
setAutoCommit(false),因为“鼓励用户修改他们的应用程序以支持规范而不是使用这个旗帜。” - 据我了解,如果您将标志设置为 false,如果您在使用自动提交等的连接上调用rollback(),驱动程序将不会引发异常,我怀疑这就是您想要的(即驱动程序是对潜在的错误保持沉默)。 -
如果您使用
setAutoCommit(false),您还必须更改您的应用程序以在适当的情况下显式调用commit()或rollback()。这两个选项并不等效,但我个人会修改我的应用程序,使其适用于 JDBC 指定的行为。
标签: java jdbc commit oracle19c autocommit