读取数据库时报java.sql.SQLException: 流已被关闭

问题描述:

使用Connection、Statement/PreparedStatement、ResultSet来取数据库信息:

......... ResultSet rs = stmt.executeQuery(); String str1 = rs.getString(field1); ...... String str2 = rs.getString(field2); .........

当执行到String str2 = rs.getString(field2);时抛出异常:java.sql.SQLException: 流已被关闭

检查程序代码,缺未发现有什么异常的地方,那么到底是什么原因造成的呢?

出错原因及解决方法:

仔细查看java api文档,在ResultSet类的最上面有一段文字:

默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

就是说ResultSet只能向前移动(rs.next()),而且只能按所取的记录的列的顺序来读取,所以这里:

String str1 = rs.getString(field1); String str2 = rs.getString(field2);

如果所取的记录里字段field2在field1之前,而读取的时候读field2在读field1之后,那么就会抛出上述异常!!

解决方法非常简单:要么修改select语句使得field2在field1之前,要么修改读取语句的顺序!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一枝花算不算浪漫

[数据库操作]Java中的JDBC的使用方法.

30180
来自专栏Java编程技术

你真的的懂JDBC?

Java中操作数据库元老是使用JDBC,而JDBC内部是如何实现的,为何每次使用时候都是写那些不理解的几行固定代码?这些看似不相关的代码内部是否有瓜葛那,下面进...

9220
来自专栏jeremy的技术点滴

JVM的Finalization Delay引起的OOM

43280
来自专栏九彩拼盘的叨叨叨

async/await 写法示例

async/await 让写异步代码感觉像写同步代码。async/await 并不是 ES6 的一部分,但可以通过使用 Babel 来使用它。

9320
来自专栏技术碎碎念

jdbc基础 (一) MySQL的简单使用

前段时间学习了jdbc,正好利用这几篇文章总结一下。 JDBC 可做三件事:与数据库建立连接、发送操作数据库的语句并处理结果。 而程序首先要做的就是加载数据库驱...

34660
来自专栏Java后端生活

JDBC(二)通过Statement执行更新操作

数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语句

12150
来自专栏DT乱“码”

数据库连接(直接用)

package com.sanqing.util; import java.sql.Connection; import java.sql.DriverMa...

19160
来自专栏拂晓风起

C++ link2005 error 错误 解决方法汇总(一般重复定义,如果都是不就是 函数定义和实现没有分离)

13840
来自专栏mini188

java中的锁

java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够。于是再次翻看了一下书里的内容,突然有点打开脑门的感觉...

54090
来自专栏weixuqin 的专栏

JDBC技术

任何一种数据库驱动程序都提供一个 java.sql.Driver 接口的驱动类,在加载某个数据库驱动程序的驱动类时,都创建自己的实例对象并向 java.sql....

11220

扫码关注云+社区

领取腾讯云代金券