当前位置: 技术问答>java相关
讨论如何高效实现分页。
来源: 互联网 发布时间:2015-10-17
本文导语: 在大量数据记录的情况下,实现分页功能如何做查询速度最快???欢迎高手讨论,一定给分。 | 简单方法如下: int curpage=1;//当前页 int page_record=20;//每页显示的记录数 //显示第1000页的记录...
在大量数据记录的情况下,实现分页功能如何做查询速度最快???欢迎高手讨论,一定给分。
|
简单方法如下:
int curpage=1;//当前页
int page_record=20;//每页显示的记录数
//显示第1000页的记录,用下面的方法
curpage=1000;
rs.executeQuery("select top "+page_record+" * from tablename where id not in (select top "+(curpage*page_record)+" id from tablename order by id desc) order by id desc");
本查询语句得到的是所要显示的1000页的20条记录,大致思路为——
子查询排除前999*20(页数*每页记录数)条记录,父查询则对余下的记录进行降序排列
int curpage=1;//当前页
int page_record=20;//每页显示的记录数
//显示第1000页的记录,用下面的方法
curpage=1000;
rs.executeQuery("select top "+page_record+" * from tablename where id not in (select top "+(curpage*page_record)+" id from tablename order by id desc) order by id desc");
本查询语句得到的是所要显示的1000页的20条记录,大致思路为——
子查询排除前999*20(页数*每页记录数)条记录,父查询则对余下的记录进行降序排列
|
在很多论谈上都有这个例子的。我也只是引用别人的而以。
JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle
姓名
年龄
0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i
第页 共页 下一页 1){%>上一页
JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle
姓名
年龄
0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i
第页 共页 下一页 1){%>上一页
|
每次查询的时候只根据每页显示的个数,比如10,每次就只查10条记录,其他的只要统计出来就行。
下一次翻页,再查下10条,剩下的还只是个统计数。
下一次翻页,再查下10条,剩下的还只是个统计数。
|
滚东记录
|
JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle
姓名
年龄
0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
while(i
第页 共页 下一页 1){%>上一页
public class pageControl
{
public int curpage ;
public int maxpage ;
public int maxrowcount ;
public int rowsperpage ;
public void calMaxPage()
{
if (this.maxrowcount % this.rowsperpage==0)
{
this.maxpage = this.maxrowcount/this.rowsperpage;
}
else
{
this.maxpage = this.maxrowcount/this.rowsperpage + 1;
}
}
}
jsp中:
pageControl pageCtl=new pageControl();
pageCtl.rowsperpage=10;//每页显示的行数
int pageNo=1;
if (request.getParameter("page")!=null)
{
pageNo=Integer.parseInt(request.getParameter("page"));
}
pageCtl.curpage=pageNo;//当前页
pageCtl.maxrowcount=从数据库中取得的要显示出来的记录数
pageCtl.calMaxPage();//调用方法
首页 上一页
下一页 尾页
每页行 共行 第页
共页
//over
|
Oracle中:
采用 top n 方法
select *
from (select item_code, rownum rno
from epd_item_master
where rownum = 10020;
可取出 10020-10041条纪录
程序使用时课改写一下(我在bean中实现,效果很好,十几万条纪录的表,查询速度很快)
"
select *
from (select HXH_TNAME.*, rownum rno
from ("+SQLstr+") HXH_TNAME
where rownum = "+rs_last+"
)"