Posted on 2007-05-08 15:37
David.Ko 阅读(189)
评论(0) 编辑 收藏 所属分类:
MySQL
最近做了一个中小企业网络平台,在操纵结果集时,在abstract() 和 next() 的使用上产生了冲突,以致于总是漏掉最开始的一条数据。因为其中内嵌了分页程序,int pointer = (sp.getShowPage() - 1) * sp.getPageSize() + 1;
abstract(pointer)后指针指向第一条数据(开始时指针指向第一条的前面),然后我用while(rs.next())获取并保存其中的sp.getPageSize() 个数据(实际上我只获取了sp.getPageSize() -1个),因为在调用rs.next()后,指针向下移动了一行,即此时指向第二条数据了。
这种指针的移动在所有数据库中都是一样的。因为JDBC 驱动需要提前获得一行来判断当前行是否是最后一行。
所以我换了一种新结构:
rs.absolute(pointer);
for (int i = 0; i < sp.getPageSize(); i++) {
//获取并保存信息
if (!rs.next()) // next()在这即起到了移动指针,有起到了判断剩余的数据不足sp.getPageSize()的作用,
有点类似于直接插入排序中的变量j
break;
}
这样便不会漏掉数据,而且提高了程序执行效率!