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ループ内での結果の反復SELECTとループの両方に使用しUPDATEています。を実行した瞬間にUPDATE、 に関連付けられた結果セットSELECTが閉じられるため、これは機能しません。

修正するには、2 つの別個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 に答える