0

我有以下例外: 在此处输入图像描述

这是相关的代码部分: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();}

}   

服务器.服务器.:

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

主要的:

Server sv = new Server(5555);

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

4

2 回答 2

3

您正在使用stmt循环的结果SELECTUPDATE循环内的结果进行迭代。这不起作用,因为在您执行 的那一刻UPDATE,与 关联的结果集SELECT被关闭。

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

于 2013-01-18T18:22:12.860 回答
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循环 - 这是一个严重的错误。

于 2013-01-18T18:22:52.513 回答