首页 >数据库 >mysql教程 >Java中如何处理'ResultSet关闭后不允许操作”异常?

Java中如何处理'ResultSet关闭后不允许操作”异常?

Linda Hamilton
Linda Hamilton原创
2024-10-29 14:21:02848浏览

How to Handle

Java - 处理“ResultSet 关闭后不允许操作”异常

关闭 MySQL 连接时,可能会遇到错误“Operation not结果集关闭后允许。”发生这种情况是因为 JDBC 逐渐检索查询结果,为您提供一个 ResultSet,当连接关闭时该 ResultSet 将变得无效。

异常原因

您返回的 ResultSet您的方法依赖于打开的连接。当您关闭finally块中的连接时,ResultSet将变得不可用,从而导致异常。

解决方案

创建一个使用以下方法而不是返回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 或语句关闭期间引发的异常干扰连接关闭。
  • 促进查询参数化以防止 SQL 注入。

结论

为了避免“ResultSet 关闭后不允许操作”异常,请修改代码以使用 RowMapper 填充对象或集合并返回它们而不是 ResultSet。这种方法可确保您的方法在连接关闭后保持功能。

以上是Java中如何处理'ResultSet关闭后不允许操作”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn