ホームページ >データベース >mysql チュートリアル >JDBC を使用すると、Java コードで「ResultSet クローズ後の操作は許可されません」エラーがスローされるのはなぜですか?
JDBC ResultSet エラー: 「ResultSet が閉じられた後は操作は許可されません」
Java では、JDBC を使用してデータベースに接続し、クエリを実行します。接続が途中で閉じられると、ResultSet でエラーが発生する可能性があります。
原因:
JDBC ResultSet はクエリ結果の完全な表現ではありません。代わりに、データベースへのライブ接続が提供され、結果を行ごとにフェッチできるようになります。接続が閉じられると、ResultSet は接続を失い、無効になります。
エラー メッセージ:
java.sql.SQLException: Operation not allowed after ResultSet closed
コード サンプル:
次のコードはエラーを示しています:
<code class="java">ResultSet rs = null; Connection connection = null; Statement st = null; try { connection = DriverManager.getConnection("databaseadress","username","password"); st = connection.createStatement(); rs = st.executeQuery(query); } catch (...) {} // exception handling finally { if (rs != null) rs.close(); if (st!= null) st.close(); if (connection != null) connection.close(); }</code>
このコードでは、接続が閉じられた後でも、rs がfinally ブロックの外で使用されているため、エラーが発生します。
解決策:
このエラーを回避するには、データベース接続スコープ内の ResultSet に基づいて一時的なオブジェクトまたはコレクションを設定する必要があります。接続が閉じられると、一時的なオブジェクトまたはコレクションは問題なく返されたり使用されたりすることができます。
再構築されたコード:
<code class="java">public static <T> List<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); List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } if (rs != null) rs.close(); if (st != null) st.close(); if (connection != null) connection.close(); return list; }</code>
以上がJDBC を使用すると、Java コードで「ResultSet クローズ後の操作は許可されません」エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。