日期:2014-05-18  浏览次数:20830 次

jsp大数据量分页(现在的数据是接近9000条)
如题
现在做的一个网站有个项目和新闻
大概的数据都是9000以上
如果采用数据库分页 可能导致数据库频繁访问 服务器压力大 (类似门户站)
如果采用记录集的自带的分页 数据太多 客户机和网络压力 又太大

昨天查了一下午网上的资料
有个思路:首先在数据库里分页 比如分1000条一页 (即一次查询1000条)
  然后,从返回的1000条数据里进行记录集分页
问题:如何当用户点到最后一页的时候(即当前1000条记录,分出来的最后一个页的页码时再次调用数据库分页。同时,如果用户点了最后一页应该是显示总共9000条记录的最后一页还是????)

------解决方案--------------------
直接分页啊 用SQL语句控制多好
select top [pagesize] * from table where id not in ( select top [pagesize*(currentpage-1)] id from table [查询条件] order by id ) and [查询条件] order by id

你查全世界人的 DNA排列都 没问题
------解决方案--------------------
问题:如何当用户点到最后一页的时候(即当前1000条记录,分出来的最后一个页的页码时再次调用数据库分页。同时,如果用户点了最后一页应该是显示总共9000条记录的最后一页还是????)

你这样的需求好像就有点儿复杂了,你想先数据库分页,然后页面中在对记录集分页,提供最后一页的链接,点击时显示的是哪个最后一页?
呵呵,听了你的问题,我决的只能靠代码控制了。
首先数据库分页封装到记录集中,前台再对记录集分页显示,但是此时有一个问题,其实也是看你的需求了,我要是改变每页的显示条数的话,假如原来是每页10条,我显示100页就OK了,可是我改成每页30条,那再从这1000条记录集中分页的话,想想可就复杂了啊,需要做几个判断……
我觉得,这样的设计对自己或用户都不是太好的设计。
这样子,楼主又考虑到分页效率的问题,那我觉得,是不是可以借助一些分页控件,可能他们内部的控制,会比我们代码控制要好一些吧!
推荐一个:pager-taglib,不依赖任何框架,jdbc就可实现。
如有其它好的实现方式还望多多交流……
------解决方案--------------------
用多少查多少。

// 数量sql
public String getCountSql(String strwhere){
String sqlstr ="select count(*) from table";
if(!"".equals(strwhere) && strwhere != null){
sqlstr =sqlstr+" where "+strwhere;
}
return sqlstr;
}
// 记录sql:currpage当前页;rowsPerPage每页显示多少行
public String getListSql(int currpage,String strwhere,int rowsPerPage){
String sqlstr="select Top "+rowsPerPage+" id,name" ;
sqlstr = sqlstr + " from table";
sqlstr = sqlstr + " where (id not in(select top " + rowsPerPage * (currpage - 1);
if("".equals(strwhere)){
sqlstr = sqlstr + " id from TBdaby order by id desc)) ";
}
else{
sqlstr = sqlstr + " id from TBdaby where " +strwhere+ " order by id desc)) And "+strwhere;
}
sqlstr = sqlstr + " order by id desc ";
return sqlstr;
}
改成StringBuffer连接字符串。
------解决方案--------------------
楼主
我以前遇到和你一样的问题

后来我自己重新编写了分页的代码

就是你提供的那个思路

如果有9000条数据,
页面每页只显示100条,
那么我每次初始进入页面,就一次行查前1000条出来,
然后等用户点到10页的时候刚好是1000条的最后100条
点11的时候,就判断是不是页码超出了内存集合分页的页码,你在内存里保存了1000条,按100条一页
那么应该是10页,当超出11的时候就可以了,这里你需要自己写算法
仔细思考下就写出来了
问题就是
当按11页的时候,一定要判断读取后1000条数据到内存,如果点10页的时候,一定要判断,是否要重新读前1000条道存储里
麻烦就是在这里,自己要写算法判断他点的页数,到底属于哪个1000条数据的范围内
------解决方案--------------------
楼主可以把问题简化一下考虑..
 建设现在总共有 10 条数据

每个页面最多显示 3页数据
每页最多显示2条数据..

保存在数据库中的数据一共 10 条
一次从数据库中读取3页数据 = 3 X 2 = 6 条
每页显示2条: 对6条数据进行分页, 每次显示有3页...


之前给楼主说的看google对搜索结果的处理,, 貌似楼主压根就没看.....

1.在分页的时候首先需要知道数据库中总共有多少条记录, 例如例子中 总共有 10 条
2.需要知道每个页面显示多少条数据, 例如例子中 总共有 2 条
3.一次给用户展示多少页: 例如例子中 总共有 3 页

那么这个流程就很清晰了....

晕死, 下班了. 楼主先自己想着... 要是还想不明白 回头再议..