当前位置: 首页 > 知识库问答 >
问题:

关闭ResultSet两次会引发异常

华君浩
2023-03-14

我最近将Oracle JDBC驱动程序版本从11.2.0.1升级到12.1.0.1。然而,我注意到一件很奇怪的事情。在我的一个测试中,我使用Java中的以下代码关闭了ResultSet对象两次:

if (resSet != null) {
            try {
                resSet.getStatement().close();
            } catch (NullPointerException ne) {
                // nothing to do!
                // NullPointerException seen at Oracle and Sybase!
            }
        }

当我使用旧的JDBC driver 11.2.0.1时,此操作没有任何异常。但是当我切换到新的JDBC驱动程序12.1.0.1时,它抛出了一个异常:

java.sql.SQLException: Closed Resultset: getStatement
    at oracle.jdbc.driver.InsensitiveScrollableResultSet.getStatement(InsensitiveScrollableResultSet.java:272)

我使用JDK7u45和java.sql.ResultSet。

共有1个答案

盖高畅
2023-03-14

正如注释中已经指出的,您不是在调用resultset.close(),而是在调用resultset.getstatement()后跟一个statement.close()

resset.getStatement()的调用会引发异常,这是JDBC规范/API文档所要求的:

抛出:
sqlexception-如果发生数据库访问错误或在关闭的结果集上调用此方法

(强调我的)

 类似资料:
  • 但当我忘记将语句放入try-with-resources语句时,关闭方法是不是不调用? 在试用资源中,关闭称为 在流api中,关闭被称为 例如,离开创建资源的方法时,由java自动执行??? 我在互联网上搜索了其他信息,并查看了文档。两人都建议删除throws Exception语句。但是我对这个建议的反应是,当将来我们的项目中有人实现了新的接口(毫无例外),并且忘记了将它们放入try-with-

  • 我读过很多帖子,人们说在java、语句等中关闭连接,但我没有找到我的问题的答案。 我问我不做Con.close(),但我做所以它会关闭连接或不? 所以我只想知道,当我们关闭结果集时,连接是否会关闭?

  • 问题内容: 我正在用Java从头开始编写RPG战斗系统,雄心勃勃吧?好吧,我遇到了麻烦。这是我的代码: 当它到达代码中的这一点时,我得到: 你会怎么做?说(战斗)(运行)(使用项) 线程“主”中的异常java.util.NoSuchElementException: 在Combat.turnChoice(Combat.java:23)的 java.util.Scanner.nextLine(Unk

  • 问题内容: 我在用于SQLite的JDBC驱动程序中有问题。 我正在用SELECT语句执行查询。 如果我得到一个空(0行),则在调用时会抛出“ Closed ResultSet”异常。 没有大量的JDBC经验,我的理论(我无法通过JavaDocs确认)是 对空(零行)结果集不起作用(通过设计或由于错误) 的“打开”标志设置为零行(同样是设计或错误) 我看到了此错误报告,但不确定是否相关。 我的要求

  • 在将基础设施从JEE6迁移到Jee7之后,我在Quartz调度器中得到了一个“resultset is closed”异常。 是:9.0.0.10 DB2:v11.1.4.4 DB2 JDBC:11.1.3_4.22.38(与11.1.4.4的行为相同) jpa:hibernate-jpa-2.1-api:1.0.2.final JTA:1.2 Spring:5.1.4 Hibernate:5.2

  • 如果在java中执行关闭挂钩期间引发了未捕获的异常,jvm是否会立即退出,而不运行其余已注册的关闭挂钩(如果有)?从javadocs: 未捕获的异常通过调用线程ThreadGroup对象的uncaughtException方法在关闭钩子中处理,就像在任何其他线程中一样。此方法的默认实现将异常的堆栈跟踪打印到System.err并终止线程;它不会导致虚拟机退出或停止。 似乎其他关机挂钩应该运行...