为啥我从未关闭过任何 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 错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 java.sql.ResultSet 的“getFloat(column)”方法不返回任何内容,而其他方法则返回?