ホームページ >データベース >mysql チュートリアル >Java で「ResultSet が閉じられた後は操作は許可されません」例外を処理する方法?
Java - 「ResultSet クローズ後の操作は許可されていません」例外の処理
MySQL 接続を閉じるときに、「操作が許可されていません」というエラーが発生する場合があります。 ResultSet が閉じられた後は許可されます。」これは、JDBC がクエリ結果を段階的に取得し、接続が閉じると無効になる ResultSet を提供するために発生します。
例外の原因
返される ResultSetあなたのメソッドはオープン接続に依存しています。 Finally ブロック内で接続を閉じると、ResultSet が使用できなくなり、例外が発生します。
Solution
ResultSet を返す代わりに、次のメソッドを作成します。オブジェクトまたはオブジェクトのコレクションを設定します。次に、設定されたオブジェクトまたはコレクションを返します。
リファクタリングされたコード
次のコードは、メソッドの変更されたバージョンを示しています。
<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException { Connection connection = DriverManager.getConnection("databaseadress", "username", "password"); Statement st = connection.createStatement(); ResultSet rs = st.executeQuery(query); List<T> list = new ArrayList<>(); while (rs.next()) { list.add(rowMapper.mapRow(rs)); } try { rs.close(); st.close(); connection.close(); } catch (SQLException e) { log.info(e); } return list; }</code>
RowMapper の使用
RowMapper インターフェイスは、ResultSet の各行をオブジェクトにマップするために使用されます。設定したいオブジェクトに基づいて RowMapper の独自の実装を作成できます。
利点
このアプローチにより、次のことが可能になります。
結論
「ResultSet が閉じられた後は操作は許可されません」例外を回避するには、RowMapper を使用してオブジェクトまたはコレクションを設定し、ResultSet の代わりにそれらを返すようにコードを変更します。このアプローチにより、接続が閉じられた後もメソッドが機能し続けることが保証されます。
以上がJava で「ResultSet が閉じられた後は操作は許可されません」例外を処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。