返回结果集
在查询数据库时,需要有效地处理返回的结果。当尝试从查询数据库的方法返回 ResultSet 时,会出现一个常见问题。但是,直接返回 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; }
在此例如,list() 方法查询数据库,将结果映射到 Biler 对象列表,然后返回该列表。这可以确保 ResultSet 正确关闭并防止资源泄漏。
另一种方法是使用 try-with-resources 语句,该语句会在代码块完成时自动关闭资源:
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; }
通过遵循这些建议,开发人员可以确保正确处理 ResultSet,防止资源泄漏并确保 Java 应用程序中高效的数据库访问。
以上是如何避免Java中的'java.sql.SQLException:ResultSet关闭后不允许操作”?的详细内容。更多信息请关注PHP中文网其他相关文章!