关于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),因此就报错啦。。。。





你可能感兴趣的:(AFTER)