java exception:ResultSet关闭后不允许操作

时间:2013-01-18 18:19:14

标签: java sql

我有以下例外: enter image description here

这里是相关的代码部分: Server.Proxy.update_allLogOut :(第65行是while括号)

    public void update_allLogOut ()
{
    try 
    {
        ResultSet rs;
        stmt = conn.createStatement();
        rs = stmt.executeQuery("SELECT * FROM sysuser WHERE login=1");
        while(rs.next())
        {
            stmt.executeUpdate("UPDATE sysuser SET login=0");
        }
        rs.close();
    } catch (SQLException e) {e.printStackTrace();}

}   

Server.Server:

      public Server(int port) 
 {
    super(port);
    func.update_allLogOut();
  }

主:

Server sv = new Server(5555);

我必须指出99%的时间它没有例外运行..但有几次我得到这个例外,我无法弄清楚它为什么会发生。有任何想法吗?很明显,某些事情做错了,但这里所有类似的主题都没有给出答案......

2 个答案:

答案 0 :(得分:3)

您正在使用stmt来迭代循环内SELECTUPDATE的结果。从执行UPDATE开始,此操作无效,与SELECT关联的结果集将关闭。

要修复,请使用两个单独的Statement个对象。

答案 1 :(得分:1)

我不确定,这块:

    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT * FROM sysuser WHERE login=1");
    while(rs.next())
    {
        stmt.executeUpdate("UPDATE sysuser SET login=0");
    }
    rs.close();

是个好主意。 为什么不执行简单查询:UPDATE sysuser SET login=0 WHERE login=1

此外,在stmt循环内使用相同的while - 这是一个粗略的错误。