Java で MySQL 接続を閉じるときに「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」が発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-10-31 11:03:29
オリジナル
835 人が閲覧しました

Why am I getting

Java で MySQL 接続を閉じる際の問題

問題:

例外「java.sql.SQLException: オペレーション」 ResultSet を閉じた後は許可されません」というメッセージが MySQL データベースへの接続を閉じるときに発生し、接続終了後の ResultSet の処理に問題があることを示します。

コードの抜粋:

<code class="java">public static ResultSet sqlquery(String query) {
    ResultSet rs = null;
    Connection connection = null;
    Statement st = null;
    try {
        // Establish connection and execute query
    } finally {
        // Attempt to close connection and ResultSet objects
    }
    return rs;
}</code>
ログイン後にコピー

説明:

JDBC は、すべてのクエリ結果を直ちに ResultSet に取得しません。代わりに、結果の取得を容易にするオブジェクトを提供します。ただし、このオブジェクトは接続が閉じると無効になります。

解決策:

この問題を回避するには、接続を閉じる前にコードでクエリ結果を保存するオブジェクトを作成する必要があります。 。これには、RowMapper を使用して ResultSet 行をオブジェクトにマップし、メソッドの結果として返されるコレクションにデータを取り込むことが含まれます。

解決されたコード:

<code class="java">public static <T> List<T> sqlquery(String query, RowMapper<T> rowMapper) {
    Connection connection = null;
    Statement st = null;
    ResultSet rs = null;
    try {
        // Establish connection and execute query
    } finally {
        // Handle possible exceptions gracefully
    }
    while (rs.next()) {
        list.add(rowMapper.mapRow(rs));
    }
    return list;
}</code>
ログイン後にコピー

追加メモ:

  • RowMapper を使用すると、さまざまなデータ型を処理するためにコードがより再利用可能で多用途になります。
  • SQL インジェクション攻撃を防ぐために、クエリのパラメータ化を検討してください。
  • Spring-jdbc は、JDBC 操作を簡単に処理するための堅牢なソリューションを提供します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート