【问题标题】:Why I am getting "Operation not allowed after ResultSet closed" when i execute my query?为什么我在执行查询时收到“ResultSet 关闭后不允许操作”?
【发布时间】:2015-02-12 06:18:44
【问题描述】:
String sql = "Select * from EmployeeAccount";

try {
   Class.forName("com.mysql.jdbc.Driver");    
   Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/AttendanceSystemTest","root","");   
   Statement stmt=con.createStatement();
   ResultSet rs=stmt.executeQuery(sql);

   String user=txtid.getText();

   String pwd=new String (password.getPassword());
   int loop=0;

   while(rs.next()) {
      String uname=rs.getString("Emp_ID");
      String password=rs.getString("Password");

      if ((user.equals(uname)) && (pwd.equals(password))) {
         String s1 = "insert into Attendance (Emp_ID,Date,Time_in) Values ('" + user + "', now(), curtime());";
         stmt.executeUpdate(s1);
         loop++;
      }
  }

  rs.close();

  if (loop==0) {
     JOptionPane.showMessageDialog(null, "Username and Password not in database!");
   }
}

catch (Exception e) {
    JOptionPane.showMessageDialog(null,e);
}

【问题讨论】:

  • 格式化你的代码!目前您的问题很难阅读。

标签: java mysql jdbc


【解决方案1】:

while(rs.next()) 循环内调用stmt.executeUpdate(s1); 会关闭ResultSet,因此,对rs.next() 的下一次调用会引发异常。

您应该使用不同的Statement 实例来执行该更新。

当生成它的 Statement 对象关闭、重新执行或用于从多个结果序列中检索下一个结果时,ResultSet 对象会自动关闭.

(Source)

【讨论】:

  • 如果您花点时间解释一下为什么在重新使用相同的Statement 对象做其他事情之前应该关闭ResultSet,您的答案将会大大改善.
  • @GordThompson 实际上,我原来的答案是错误的。代码格式化后,更容易看出真正的问题。
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2017-04-17
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多