ホームページ >データベース >mysql チュートリアル >JDBC の使用時に「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されません」が発生するのはなぜですか?

JDBC の使用時に「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されません」が発生するのはなぜですか?

DDD
DDDオリジナル
2024-10-29 14:07:02941ブラウズ

Why Am I Getting

Java - 接続が閉じられた後、ResultSet を使用できません

問題:

を試みましたJDBC を使用してデータベース クエリを実行すると、次のエラーが発生します:

java.sql.SQLException: Operation not allowed after ResultSet closed

分析:

JDBC は、ResultSet オブジェクトを利用してクエリからデータを取得します。ただし、データベースへの接続が閉じられると、ResultSet オブジェクトは無効になり、使用できなくなります。

解決策:

この問題を解決するには、クエリを実行したメソッドを超えた ResultSet オブジェクト。代わりに、ResultSet を使用してオブジェクトまたはリストを設定し、その結果のオブジェクトを返します。

オブジェクトを設定するサンプル コード:

<code class="java">public static Collection<T> sqlquery (String query, RowMapper<T> rowMapper) throws SQLException
{
    Connection connection=null;
    Statement st=null;
    ResultSet rs=null;     
    connection = DriverManager.getConnection("databaseadress","username","password");
    st = connection.createStatement();  
    rs = st.executeQuery(query);
    Collection<T> collection = new ArrayList<>();
    while (rs.next()) {
        collection.add(rowMapper.mapRow(rs));
    }
    // Close resources even if exceptions are thrown
    closeGracefully(rs, st, connection);
    return collection;
}</code>

リソースを正常に閉じる:

<code class="java">private static void closeGracefully(ResultSet rs, Statement st, Connection connection) {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
    if (st != null) {
        try {
            st.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) { /* Log or ignore */ }
    }
}</code>

追加の考慮事項:

  • 行マッパーを使用して、ResultSet の各行からオブジェクトを作成します。
  • SQL インジェクション攻撃を防ぐためにクエリをパラメータ化します。
  • データベース アクセスを簡素化するには、JDBC や Spring JDBC などのサードパーティ ライブラリの利用を検討してください。

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

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