我最近将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。
正如注释中已经指出的,您不是在调用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并终止线程;它不会导致虚拟机退出或停止。 似乎其他关机挂钩应该运行...