2016-07-08 79 views
1

即时得到异常:得到错误“不允许操作的ResultSet关闭后,”

不允许操作的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); 
} 
+4

您正在使用两次相同的'Statement'对象。你需要两个不同的'Statement'对象来执行查询和更新 – Sanjeev

回答

2

,你将需要两个不同的Statement对象执行查询和更新部分尝试:

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); 
} 
} 

也可以考虑使用PreparedStatement,并使用set*方法来避免潜在的SQL注入

+0

认真?只是代码,没有解释? – GhostCat

+0

@Jägermeister - 对不起被叫走 - 要做的工作和所有。 –

相关问题