gpt4 book ai didi

java - 两次关闭 ResultSet 会引发异常

转载 作者:行者123 更新时间:2023-12-01 18:38:27 24 4
gpt4 key购买 nike

我最近将 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 驱动程序 11.2.0.1 时,这没有任何异常。但是当我切换到新的 JDBC 驱动程序 12.1.0.1 时,它会抛出异常:

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

为什么会发生这种情况?当我检查 ResultSet 的 JavaDoc 时,它说:在已经关闭的 ResultSet 对象上调用 close 方法是无操作。

所以现在我很困惑,调用 close 两次是无操作意味着它不应该抛出任何异常,对吗?

我使用 JDK7u45 和 java.sql.ResultSet。

最佳答案

正如评论中已经指出的,您不是调用 ResultSet.close(),而是调用 ResultSet.getStatement() 后跟 Statement.close () 代替。

resSet.getStatement() 的调用会引发异常,正如 JDBC spec/api doc 所要求的那样。 :

Throws:
SQLException - if a database access error occurs or this method is called on a closed result set

(强调我的)

关于java - 两次关闭 ResultSet 会引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20839236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com