我们最近将Oracle数据库从11g版本2升级到19c。
现在我们有Oracle 19c数据库服务器,JDK 1.8和ojdbc6.jar组合。
我们有一些java代码来创建具有可滚动和并发只读ResultSet特性的JDBC语句对象。使用上述组合时,JDBC查询执行失败,出现以下错误
Approach1:
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet resultSet = statement.executeQuery(query);
升级后语句。executequery()方法抛出以下异常
java.sql.SQLRecoverableException: Closed Connection
at oracle.jdbc.driver.OracleStatement.ensureOpen(OracleStatement.java:4477)
at oracle.jdbc.driver.OracleStatement.clearWarnings(OracleStatement.java:3430)
at oracle.jdbc.driver.OracleStatement.prepareForNewResults(OracleStatement.java:3946)
at oracle.jdbc.driver.OracleStatement.doScrollExecuteCommon(OracleStatement.java:5246)
at oracle.jdbc.driver.OracleStatement.doScrollStmtExecuteQuery(OracleStatement.java:5302)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1325)
at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:422)
at JDBCConnectionUtilDebug.getQueryOutput(JDBCConnectionUtilDebug.java:294)
但是如果我使用以下方法运行相同的sql查询,那么它工作得很好
Approach2:
Statement stat = connection.createStatement();
boolean ret = stat.execute(query");
if (ret) {
ResultSet rs = stat.getResultSet();
任何帮助/指针为什么apach1失败,但apach2正在工作?
感谢@Mark Rotteveel和@ibre5041的回复。
根据[什么是Oracle JDBC版本和JDK版本?]]https://www.oracle.com/in/database/technologies/faq-jdbc.html
组合19C数据库,java 1.8和ojdbc6.jar不兼容。
Oracle JDBC驱动程序始终兼容最新的JDK版本在每个新版本中。在某些版本中,JDBC驱动程序支持多个JDK版本。使用下表选择正确的JDBC
Oracle数据库版本
19.倍特定于版本的JDBC Jar文件
- JDBC 4.3 in ojdbc10.jar
- JDBC 4.2 in ojdbc8.jar
在使用ojdbc8.jar而不是ojdbc6.jar后,两个查询执行方法都运行良好。