java 流已被关闭_java.sql.SQLException: 流已被关闭

数据库字段如下:

ID       INTEGER

USERNAME VARCHAR2(50) Y

SENDER   VARCHAR2(50) Y

MESSAGE  LONG         Y

SENDTIME VARCHAR2(20) Y

ISREAD   VARCHAR2(1)  Y

DAO 层的getAll方法

public List getAll()

{

String listSql="select * from sms";

List listSms=new ArrayList();

PreparedStatement ps=DbBase.prepare(connection, listSql);

try {

ResultSet rs=ps.executeQuery();

while(rs.next())

{

SmsPo smsPo=new SmsPo();

smsPo.setId(rs.getInt(1));

smsPo.setUsername(rs.getString("username"));

smsPo.setSender(rs.getString("sender"));

smsPo.setSendtime(rs.getString("sendtime"));

smsPo.setMessage(rs.getString("message"));

smsPo.setIsRead(rs.getBoolean("isread"));

listSms.add(smsPo);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally

{

DbBase.close(ps);

DbBase.close(connection);

}

return listSms;

}

main函数的测试:

public static void main(String[] args){

SmsService smsService=new SmsService();

List list=smsService.getAll();

Iterator iterator=list.iterator();

while(iterator.hasNext())

{

SmsPo smsPo=iterator.next();

System.out.println(smsPo.getUsername());

}

}

此时运行,会出现错误:

java.sql.SQLException: 流已被关闭

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:207)

at oracle.jdbc.driver.LongAccessor.getBytes(LongAccessor.java:150)

at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:192)

at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:421)

at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:396)

at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1514)

at com.yy180.docman.dao.SmsDAO.getAll(SmsDAO.java:33)

at com.yy180.docman.service.SmsService.getAll(SmsService.java:19)

at com.yy180.all.TestAll.main(TestAll.java:12)

而当我将DAO层的相关代码修改一下顺序:

while(rs.next())

{

SmsPo smsPo=new SmsPo();

smsPo.setId(rs.getInt(1));

smsPo.setUsername(rs.getString("username"));

smsPo.setSender(rs.getString("sender"));

smsPo.setMessage(rs.getString("message"));

smsPo.setSendtime(rs.getString("sendtime"));

smsPo.setIsRead(rs.getBoolean("isread"));

listSms.add(smsPo);

}

运行一下就可以了。。

原因可能是读取数据库的流是按顺序的,当不按顺序读取时,就会出现错误,

转载于:https://my.oschina.net/u/2552902/blog/543982

标签:jdbc,java,getString,rs,流已,driver,SQLException,smsPo

来源: https://blog.csdn.net/weixin_34050519/article/details/92327028

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值