|
最近刚刚学完Java Web的分页处理,数据库用的是SQLServer2000,关于SQLServer2000的分页处理,我个人感觉比MySql要烦琐很多,在网上有关于SQLServer的分页处理的SQL语句算法,我也尝试着用了一下,不过在我机器上的SQLServer2000总是报错,具体语句是:以下是引用片段:
select top PAGESIZE * from components where id not in
(select top (PAGESIZE*(CURRENTPAGE-1))
id from components order by id)order by id
如:
以下是引用片段:
select top 10 * from components where id not in
(select top 10*10 id from components order by id)
order by id
在我的机器上在“order”处总是出现语法错误,本人的数据库SQL语法并不很强,所以我想用另外一种途径解决,基本的思维和MySql中“select * from Articles where parentsID=0 limit pageNo, pageSize;”差不多,也就是在显示之前把信息分段提取出来,在把这一段信息划为一页的信息。在MySql中可以用SQL语句直接分好,但是在SQLServer2000中我的机器貌似很不争气,再加上我的技术有限,我只能寻找另外的途径解决,以下就是我的解决方法,当然这个方法不能和高手的方法相比,这只是我学业路程上的一点小小的探索。
如上面所说,我既然不能直接在数据库中把信息分段,然后我就在想,我能不能在把所有信息提取出来后,在ResultSet里把信息分段,比如我把3条信息分为一段,即:一页。所以我按照我的想法慢慢的做了出来:
在显示页面,比如show.jsp中接收页码即:
String strPageNo = request.getParameter("pageNo");
下面是对strPageNo的一些验证,然后把strPageNo强制转换付给int pageNo;再定义每一页显示的信息数量,比如
int pageSize = 3;
然后利用数据库查询把所有信息的数量查出来付给int totalRecords; 再计算总共有多少页:
int totalPages = totalRecords % pageSize == 0 ? totalRecords / pageSize : totalRecords / pageSize + 1;
下面就要对查询出的信息进行分页了,首先在查询之前要算出开始信息的位置:
int startPos = pageNo * pageSize - pageSize + 1;
下面是进行信息查询,把查询出来的滚动结果集付给ResultSet rs;接着把游标移到开始信息的位置即:
rs.absolute(startPos);
然后把游标移动到上一个:
rs.previous();
接着进行分段取信息:
for(int pages = 1; pages <= totalPages && pages < startPos + pageSize; pages++) {
rs.next();
//取出你要的信息
}
这就差不多了,剩下的关于代码健壮性的自己可以添加,本人技术有限,如果有错误的地方请指正,我会尽快改正,谢谢! |
|