【问题标题】: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。反正没有人对其余代码感兴趣。

标签: java jdbc connection resultset sqlexception


【解决方案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 时,你最后错过了',在执行删除语句时,你错过了一个双引号。检查这些,让我知道它是否有效。
  • 哦!对于那个很抱歉。在消息框中编辑时出现拼写错误。那不是我遇到的问题。我的代码编译并运行,但后来抛出异常(运行时)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多