首页 >数据库 >mysql教程 >为什么我在 Java JDBC 中收到'java.sql.SQLException: ResultSet 关闭后不允许操作”?

为什么我在 Java JDBC 中收到'java.sql.SQLException: ResultSet 关闭后不允许操作”?

Linda Hamilton
Linda Hamilton原创
2024-10-29 19:01:02849浏览

Why Am I Getting

Java:连接关闭后使用 ResultSet 时出错

尝试使用 JDBC 从 MySQL 数据库检索数据时,用户可能会遇到以下错误: “java.sql.SQLException:结果集关闭后不允许执行操作。”当底层连接关闭后尝试使用 ResultSet 对象时,会发生这种情况。

说明

JDBC 基于延迟加载的概念进行操作,其中结果在请求之前不会完全检索查询。 ResultSet 对象在结果上提供了一个光标,允许您迭代它们。但是,关闭创建 ResultSet 的连接也会关闭游标,使其无法使用。

解决方案

要避免此错误,必须保持连接打开,直到不再需要 ResultSet 或使用不同的方法。

一种推荐的方法是使用行映射器将结果集转换为对象集合。此方法封装了转换过程,即使在连接关闭后也允许您访问结果:

<code class="java">public static List<T> sqlquery(String query, RowMapper<T> rowMapper) throws SQLException {
    try (Connection connection = DriverManager.getConnection(...);
         Statement st = connection.createStatement();
         ResultSet rs = st.executeQuery(query)) {
        List<T> list = new ArrayList<>();
        while (rs.next()) {
            list.add(rowMapper.mapRow(rs));
        }
        return list;
    }
}</code>

此修改后的代码使用 try-with-resources 来确保连接、语句和结果集方法完成时自动关闭,消除了忘记手动关闭它们的可能性。此外,它使用行映射器将结果集中的每一行转换为填充对象,然后可以将其收集到列表中。

结论

通过理解借助 JDBC 的延迟加载机制并利用行映射器,开发人员可以有效地从数据库检索数据,同时避免连接关闭后与关闭结果集相关的错误。

以上是为什么我在 Java JDBC 中收到'java.sql.SQLException: ResultSet 关闭后不允许操作”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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