【发布时间】:2022-01-12 19:01:32
【问题描述】:
我正在开发一个 Java 8 项目,该项目最近将其 ojdbc (oracle) 驱动程序从 ojdbc6:11.2.0.4 升级到 ojdbc8:19.3.0.0。升级导致一些现有代码出现问题,如下所示...
根据我在 Oracle 的 ResultSet 上阅读的文档,“当生成它的 Statement 对象关闭或重新执行时,ResultSet 对象会自动关闭”,我假设 重新执行 部分实际上是关闭“resultSetOne”,但很难通过驱动程序反编译源进行调试来说明。
PreparedStatement stmt = PreparedStatements.getInstance().getStatement("someQuery");
// Assume this returns 2 results for this example
ResultSet resultSetOne = stmt.executeQuery();
while (resultSetOne.next()) {
// This invocation closes resultSetOne
ResultSet resultSetTwo = stmt.executeQuery();
}
生成的堆栈跟踪:
java.sql.SQLException: Closed Resultset: next
at oracle.jdbc.driver.InsensitiveScrollableResultSet.ensureOpen(InsensitiveScrollableResultSet.java:116)
at oracle.jdbc.driver.InsensitiveScrollableResultSet.next(InsensitiveScrollableResultSet.java:404)
我处于无法更改代码的情况。我正在寻找一个潜在的 vm 参数,可以让我通过这个特定的驱动程序解决这个问题,我用谷歌搜索无济于事,有人有什么想法吗?
【问题讨论】:
-
除了修复代码之外,您无能为力。对不起。
-
不确定它是否会有所帮助,但您是否也尝试过(运行)较新的 jre 版本?过去我在更新 mysql 驱动程序时遇到了一些奇怪的问题;我的代码在 java5 中的行为不正确,但在 java6 中正确(可能是由于 jdbc 规范兼容性问题)