1. ホーム

ResultSet が閉じた後の操作は許可されない ResultSet 閉鎖例外

2022-02-13 13:45:20
public ResultSet executeQuery(String sql, Object... .params){ // クエリを実行します。
    トライ {

        conn = initConn();
        pst = conn.prepareStatement(sql);

        if(params == ヌル){。
            rs = pst.executeQuery(sql)。
        }else {

            for(int i = 0; i<params.length;i++){。
                pst.setObject((i+1),params[i]).となります。
            }

            rs = pst.executeQuery();
        }

    } catch (SQLException e) {.
        e.printStackTrace()を実行します。
    }最終的に
        close()を実行します。
    }
    return rs;








public class TestDB {
    public static void main(String[] args) {
        BaseDao b = new BaseDao();
        Object[] o = {


1};

        try {
            ResultSet rs = b.executeQuery("SELECT * FROM player WHERE id=? ;",o);
            if(rs.next()) {
                int i = rs.getInt("id");
                System.out.println(i);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

<未定義


1};

        try {
            ResultSet rs = b.executeQuery("SELECT * FROM player WHERE id=? ;",o);
            if(rs.next()) {
                int i = rs.getInt("id");
                System.out.println(i);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

接続データベースクエリのテスト時に、rs.next() がスローされます。 ResultSetが閉じた後の操作は許可されない 例外が発生します。
結果セットを閉じた後のメソッドは許可されませんが、rs.close() 自体を呼び出すことはありません。

実際には、結果セットを処理する前に conn が閉じられたため、エラーが発生しました。

解決方法 : 結果セットの処理が終了したら、connを閉じてください。このエラーは、コネクションを閉じて結果セットを処理した後に発生します。