java.sql.SQLException: Exhausted Resultset原因分析

本文介绍了一个常见的Java SQL异常ExhaustedResultset,并详细解释了其原因及如何避免该错误的发生。当ResultSet游标超出有效范围时,再次尝试获取数据会导致此异常。
部署运行你感兴趣的模型镜像

java.sql.SQLException: Exhausted Resultset
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)

出现这个错误的原因是因为ResultSet curser 指针已经在最后一个元素之外了,说明要么是ResultSet 集合为空,要么是集合已经没有可以读取的元素了,此时你再调用rs.get()获取元素,就会报错。

if (rs! = null) {
  while (rs.next()) {
    count = rs.getInt(1);
  }
  count = rs.getInt(1); //this will throw Exhausted resultset
}

转载于:https://my.oschina.net/u/2308739/blog/701164

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 原因分析Java 操作 MySQL 数据库时,出现 `java.sql.SQLException: Operation not allowed after ResultSet closed` 异常通常是因为在 `ResultSet` 已经关闭后,仍然尝试对其进行操作。这可能发生在手动关闭 `ResultSet`、`Statement` 或 `Connection` 之后,或者在使用 try-with-resources 自动关闭资源的情况下,试图访问已经被释放的 `ResultSet` 对象 [^3]。 ### 解决方案 为避免此类异常,应在所有数据库操作完成后再关闭 `ResultSet` 和相关资源。例如,在使用 `try-with-resources` 结构时,应确保所有操作都在该结构内部完成,而不是在其外部尝试访问资源 。 以下是一个示例代码,展示了如何正确管理资源并避免在关闭 `ResultSet` 后进行操作: ```java String sql = "SELECT id, name FROM users"; try (Connection conn = DriverManager.getConnection(url, user, password); PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("ID: " + id + ", Name: " + name); } } catch (SQLException e) { e.printStackTrace(); } ``` 在此示例中,`try-with-resources` 确保在代码块结束时自动关闭 `ResultSet`、`PreparedStatement` 和 `Connection`。这样可以避免在外部操作已关闭的 `ResultSet`,从而防止 `java.sql.SQLException: Operation not allowed after ResultSet closed` 异常的发生 [^3]。 此外,如果需要在 `ResultSet` 被关闭后仍然保留数据,可以考虑将数据缓存到集合中,例如 `List` 或 `Map`,以便后续处理 。 ### 异常与资源管理的注意事项 - 在某些情况下,即使 `ResultSet` 未被显式关闭,也可能由于 `Statement` 或 `Connection` 的关闭而被自动关闭。因此,确保在 `ResultSet` 被使用期间,相关的 `Statement` 和 `Connection` 保持打开状态 [^3]。 - 如果使用了连接池(如 HikariCP、C3P0 等),应确保正确释放资源,并遵循连接池的使用规范,以避免资源泄漏或非法访问 。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值