为啥我从未关闭过任何 ResultSet is closed 错误

Posted

技术标签:

【中文标题】为啥我从未关闭过任何 ResultSet is closed 错误【英文标题】:Why am I getting ResultSet is closed error when I never closed any为什么我从未关闭过任何 ResultSet is closed 错误 【发布时间】:2013-02-21 10:12:34 【问题描述】:

我的代码中有这个错误,并且已经彻底检查和编辑它,但我仍然遇到同样的问题。我还使用了多个 resultSet 和 Statements 但发生了同样的错误。以下是我得到的错误:

    "Database Connected with Current Date 20130221
    java.sql.SQLException: ResultSet is closed
    at sun.jdbc.odbc.JdbcOdbcResultSet.checkOpen(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcResultSet.next(Unknown Source)
    at UNSUB.main(UNSUB.java:78)"
Press any key to continue . . .

请问可能是什么原因?我现在不知道有什么解决办法。

【问题讨论】:

只在此处发布您的代码,我们才能提供帮助。 请发布您的代码。 请注意,当语句或连接关闭时,结果集也会关闭。结果集取决于语句,语句取决于连接。 你能分享一些代码吗 只发布从resultSet 提取数据的sn-p。反正没有人对其余代码感兴趣。 【参考方案1】:

异常,java.sql.SQLException: ResultSet is closed 表示您的代码已经关闭了结果集对象 您正在使用,或者更有可能的是,您的代码已经重新执行或关闭了以下语句 产生了结果集。根据 JDBC 规范,这些操作中的任何一个都将关闭任何 语句的结果集。

【讨论】:

感谢您的回复。在代码中,我有一个带有不同语句的嵌套结果集,但发生了错误。 分享代码,这将有助于指出确切的错误块。 rs1 = stmt2.executeQuery("select cnt from t1 where num = '"+ str2 +"'"); rs1.next(); cnt = rs1.getInt("cnt"); if(cnt > 0) rs2 = stmt3.executeQuery("select * from t1 where num = '123"); while (rs2.next()) reg_date = rs2.getString("reg"); ins1 = stmt3.executeUpdate("INSERT INTO t2 ([num]) VALUES('"+ str2 +"')"); Thread.sleep(10); ins2 = stmt3.executeUpdate("delete from t1 where num = '"+ str2 +"'); 【参考方案2】:

您是否在 ResultSet 上调用了方法 next()?如果您没有,那可能是您收到该错误的原因。

【讨论】:

是的,我调用了 .next() 方法并更改了语句名称。如果需要,我愿意分享代码。谢谢 问题中的stacktrace清楚地表明next()已被调用 没有注意到调用了 next() 方法。 您似乎总是忘记关闭单引号。在执行 stmt3 时,你最后错过了',在执行删除语句时,你错过了一个双引号。检查这些,让我知道它是否有效。 哦!对于那个很抱歉。在消息框中编辑时出现拼写错误。那不是我遇到的问题。我的代码编译并运行,但后来抛出异常(运行时)。谢谢

以上是关于为啥我从未关闭过任何 ResultSet is closed 错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥不用 GOTO 语句? [关闭]

馄饨代码 - 为啥是反模式? [关闭]

为啥 java.sql.ResultSet 的“getFloat(column)”方法不返回任何内容,而其他方法则返回?

Anaconda Navigator无法启动[关闭]

为啥我会收到“从未使用过的参数 [E0392]”?

onButtonClick 从未在源代码中使用过?