【问题标题】:Getting error "Operation not allowed after ResultSet closed" [duplicate]收到错误“结果集关闭后不允许操作”[重复]
【发布时间】:2016-11-10 17:36:39
【问题描述】:

我得到了异常:

ResultSet 关闭后不允许操作

我哪里错了?

代码:

try{

     Class.forName("com.mysql.jdbc.Driver");

     Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","root");
     Statement s=con.createStatement();
     ResultSet rs1=s.executeQuery("Select * from items");

     while(rs1.next()) {
       q= (q+Integer.parseInt(rs1.getString("qty")));
       //update items Set qty=5 where name='Maggi';
       s.executeUpdate("update items SET qty="+q+" WHERE name='"+value+"'");
     }
}                                        
catch(Exception ee){
  System.out.println(ee);
}

【问题讨论】:

  • 您使用了相同的Statement 对象两次。您需要两个不同的Statement 对象来执行查询和更新

标签: java mysql database jdbc


【解决方案1】:

因为您将需要两个不同的语句对象来执行查询和更新部分尝试:

 try{

     Class.forName("com.mysql.jdbc.Driver");

        Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root","root");enter code here
    Statement s=con.createStatement();
    ResultSet rs1=s.executeQuery("Select * from items");

    while(rs1.next()){
       q= (q+Integer.parseInt(rs1.getString("qty")));
       s=con.createStatement();  // <- create a new statement here
       s.executeUpdate("update items SET qty="+q+" WHERE name='"+value+"'");
    }
 }                                        
 catch(Exception ee){
    System.out.println(ee);
 }
}

还可以考虑使用PreparedStatementset* 方法来避免潜在的SQL 注入

【讨论】:

  • 认真的吗?只写代码,不解释?
  • @Jägermeister - 抱歉被叫走了 - 工作要做等等。
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 2012-10-02
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多