ホームページ >データベース >mysql チュートリアル >JDBC の使用時に「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されません」が発生するのはなぜですか?
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>
追加の考慮事項:
以上がJDBC の使用時に「java.sql.SQLException: ResultSet が閉じられた後は操作が許可されません」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。