ホームページ >データベース >mysql チュートリアル >「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」を解決する方法?

「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」を解決する方法?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 14:21:13269ブラウズ

How to Solve

ResultSet の再利用 「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」に対する解決策

「java.sql. SQLException: ResultSet を閉じた後は操作は許可されません」エラーは、複数の結果セットが同じステートメントから同時に使用されていることを示唆しています。 物体。これは、一度に 1 つの ResultSet しかオープンできないという Statement クラスのデフォルトの期待に違反します。

提供されたコードでこの問題を解決するには、次の手順を実行する必要があります:

getStuff() メソッド内:

  • 他のオブジェクトとの競合を避けるために、必要なデータを抽出した後、ResultSet オブジェクト rs を閉じる必要があります。 ResultSets.

呼び出しコード内:

  • ステートメント オブジェクトとの関連付けを解放するには、ResultSet オブジェクト rs も閉じる必要があります。
  • A new更新クエリを実行するには、PreparedStatement オブジェクトを作成する必要があります。これにより、元の ResultSet オブジェクトが影響を受けないことが保証されます。

これらの修正を加えて変更されたコードは次のようになります。

try {
    //Get some stuff
    String name = "";
    String sql = "SELECT `name` FROM `user` WHERE `id` = " + userId + " LIMIT 1;";
    ResultSet rs = statement.executeQuery(sql);
    if (rs.next()) {
        name = rs.getString("name");
    }
    rs.close();  // Close the ResultSet 'rs'

    String sql2 = "SELECT `id` FROM  `profiles` WHERE `id` =" + profId + ";";
    ResultSet rs2 = statement.executeQuery(sql2);
    String updateSql = "INSERT INTO `blah`............";
    PreparedStatement pst = (PreparedStatement) connection.prepareStatement(updateSql);

    while (rs2.next()) {
        int id = rs2.getInt("id");
        int stuff = getStuff(id);

        pst.setInt(1, stuff);
        pst.addBatch();
    }
    rs2.close();  // Close the ResultSet 'rs2'

    pst.executeBatch();

} catch (Exception e) {
    e.printStackTrace();
}

private int getStuff(int id) {

    try {
        String sql = "SELECT ......;";
        ResultSet rs = statement.executeQuery(sql);

        if (rs.next()) {
            int result = rs.getInt("something");
            rs.close();  // Close the ResultSet 'rs' in 'getStuff' method
            return result;
        }
        return -1;
    }//code continues
}

これらの変更を実装することにより、コードはすべての ResultSet が影響を受けないことを保証します。正しく閉じられ、「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」エラーが防止されます。

以上が「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。