关于rs.isAfterLast和rs.next的用法
对于rs.next,用得比较多了。它完成两个功能,一个是rs.hasNext()来判断下一个位置是否在结果集当中,把值返回,然后,它把指针下移。用它的遍历方法就是:
while (rs.next())
{
System.out.println(rs.getString(1));
}
今天看别人代码,他用的是rs.isAfterLast....这应该算是分页的一种方法吧....这样每次从结果集中取出一部分数据,效率会高。。但还是得有一次全部加载的过程,不知道效率到底怎么样。。。
isAfterLast与hasNext的区别在于前者是对当前行进行判断记录是否存在,而hasnext是对下一行进行判断,并且会把游标向下滑动一次.....
先把对它的学习贴上来再说:
首先,要用它,通常就要用rs.absolute(1),所以得先对Statement的属性做个改变 :否则会报错:对只转发结果集的无效操作
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
原因:默认是无参数的方法,statement执行后得到的结果集类型为 ResultSet.TYPE_FORWARD_ONLY.这种类型的结果集只能通过rs.next();
方法逐条读取,使用其他方法就会报异常. 如果想执行一些复杂的移动结果集指针的操作就要使用其他参数了。(而我们要用absolute嘛)
然后就是:
rs.absolute(1);
while(!rs.isAfterLast())
{
System.out.println(rs.getString(1));
}
当然,这样写的话,是个死循环。。。。因为游标始终停到1的位置。。会一直输出的。。
所以,要加上rs.next().........注意,要在out之后加上。。。
如果在out之前,会报“结果集已耗尽”的错误。。。
因为,当指针指在最后一条时,rs.isAfterlast为真的,但是它的next方法已经返回false了。。。当然,这不是报错的原因,实际报错的原因是指针已经出了结果集,
但还在用rs.getString(1),因此就报错啦。。。。
posted on 2011-10-31 17:05 java课程设计例子 阅读(530) 评论(0) 编辑 收藏 举报