java中ResultSet问题

原文地址:http://zpnest.blog.sohu.com/28905212.html

 

     想把数据库中的几条记录显示出来,结果折腾了半天也没弄成,总找不到原因,后来干脆就在读数据之前用了个rs.next(),在读取数据,这次没问题了!

      后来才发现 

      ResultSet 维护指向其当前数据行的光标。每调用一次 next() 方法,光标向下移动一行。最初它位于第一行之前,因此第一次调用 next 将把光标置于第一行上,使它成为当前行。随着每次调用 next 导致光标向下移动一行,按照从上至下的次序获取 ResultSet 行。

 

1.  我们通过JDBC查询,是否一次是把所有的结果集查询出来后放到ResultSet中。

2.  在调用ResultSet.next()方法的时候,是否还会和数据库交互。

 

      其实在以前我一直认为当statement执行完sql语句后,它会把结果集保存到ResultSet中,然后关闭这个cursor,当实际上并不是这样的。

 

      今天写的一个javabean:

 

 

开始把

 

  

 

放入了函数

 

 

中,想到每次调用都会创建一个新的stmt变量,这样太浪费资源,于是就把

 

 

放入构造函数中,使用的时候直接使用该实例即可。在jsp页面中使用该javabean。

 

 

 

      该jsp页面在运行时会抛出ResultSet is colsed异常,注意蓝色代码部分调用了executeQuery();方法,此时javabean中执行的是executeQuery(select * from table1);返回的数据集“rs”也是该语句执行的结果。

      执行到蓝色代码时也调用了executeQuery();此时执行的是调用了executeQuery(select count(*) as mycount from table1);返回的数据集rsTmp就是该语句的执行结果。 

      注意:两次使用了同一个stmt的executeQuery()方法。

      此后再使用数据集rs时就会抛出ResultSet is colsed异常,因为此时数据集rs与数据库中间的联系stmt.executeQuery(select * from table1)已经发生了变化。已经变成stmt.executeQuery(select count(*) as mycount from table1).如果采用先前的写法把Statement stmt=connect.createStatement();放入了函数public ResultSet executeQuery(String sql)中就不会出现这种问题。

      通过上面分析,我们可以的出结论通过JDBC查询结果集不是直接放到ResultSet中,ResultSet存在的可能是结果集的指针。我们在使用ResultSet时仍然需要和数据库交互。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值