【问题标题】:Getting 'ResultSet is closed' when running query second time第二次运行查询时获取“结果集已关闭”
【发布时间】:2016-05-02 07:43:07
【问题描述】:

我正在尝试传递一个 sql 查询,但我收到 "java.sql.SQLException: Operation not allowed after ResultSet closed" 。我已经根据 stackoverflow 中的相同异常进行了其他对话,但我仍然不明白这个问题。

代码如下:

String query="SELECT candidate,pan from hcl_candidates where    jngstat='Joined'";

statement=conn.createStatement();
resultset=statement.executeQuery(query);

while(resultset.next()){

statement.executeUpdate("insert IGNORE into allinvoice       (candidate,pan,invdate,client) select candidate,pan,CURDATE(),'HCL' from hcl_candidates where jngstat='Joined'");
}
}

//catch block

finally 
{
try
{

if(statement!=null)
{
statement.close();
}
if(conn!=null){
 conn.close();
 }

if(resultset!=null){
resultset.close();
 }
}
 // catch block
 }

这里是错误:

java.sql.SQLException: Operation not allowed after ResultSet closed
//So on

【问题讨论】:

  • 您的程序没有被阻止。

标签: java jsp jdbc


【解决方案1】:

重新执行Statement 会关闭之前的结果集。

很难理解你认为你在这里做什么,在一个不依赖循环改变的任何东西的循环中执行一个语句。

NB 除了“无法连接”之外,SQLException 还可能意味着很多事情。

【讨论】:

  • 感谢您指出循环,现在它可以工作了..我应该删除它,但它一定已经跳过了我的想法:)
【解决方案2】:

问题在于在同一 Statement 对象上的 while 循环中执行 executeUpdate。这违背了Statement class 的期望。

PS:你应该先关闭结果集,Statement,然后是Connection。

【讨论】:

  • 您好,我已经添加了堆栈跟踪...如果您知道什么请告诉我
  • while 循环不会“违反Statement 类”。
  • 这不是 while 循环本身。我的意图是说在同一个 Statement 对象上执行 executeUpdate 会导致问题。请参考Statementdocs.oracle.com/javase/7/docs/api/java/sql/Statement.html的Oracle文档
  • 我同意。它不是 while 这样的循环。但这就是你的回答所说的。如果还有更多内容,它应该出现在您的答案中。
  • 感谢您的建议,我现在将其包含在答案中。
猜你喜欢
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多