ResultSet を返す
データベースをクエリする場合、返された結果を効果的に処理する必要があります。データベースにクエリを実行するメソッドから ResultSet を返そうとするときに、一般的な問題が 1 つ発生します。ただし、ResultSet を直接返すと、リソース リークや不適切なリソース管理が発生する可能性があります。エラー「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」は、メソッドが実行される前に ResultSet オブジェクトが閉じられていることを示します。返してください。これを解決するには、ResultSet を Javabean のコレクションにマップし、代わりにそれを返すことをお勧めします。このアプローチにより、ResultSet は使用後に自動的に閉じられ、リソース リークが防止されます。ResultSet を Javabean のリストにマップする方法の例を以下に示します。public List<Biler> list() throws SQLException { Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; List<Biler> bilers = new ArrayList<Biler>(); try { connection = database.getConnection(); statement = connection.prepareStatement("SELECT id, name, value FROM Biler"); resultSet = statement.executeQuery(); while (resultSet.next()) { Biler biler = new Biler(); biler.setId(resultSet.getLong("id")); biler.setName(resultSet.getString("name")); biler.setValue(resultSet.getInt("value")); bilers.add(biler); } } finally { if (resultSet != null) try { resultSet.close(); } catch (SQLException ignore) {} if (statement != null) try { statement.close(); } catch (SQLException ignore) {} if (connection != null) try { connection.close(); } catch (SQLException ignore) {} } return bilers; }
public List<Biler> list() throws SQLException { List<Biler> bilers = new ArrayList<Biler>(); try ( Connection connection = database.getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT id, name, value FROM Biler"); ResultSet resultSet = statement.executeQuery(); ) { while (resultSet.next()) { Biler biler = new Biler(); biler.setId(resultSet.getLong("id")); biler.setName(resultSet.getString("name")); biler.setValue(resultSet.getInt("value")); bilers.add(biler); } } return bilers; }
以上がJava で「java.sql.SQLException: ResultSet が閉じられた後は操作は許可されません」を回避する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。