07-06
27
利用高效的SQL分页查询
作者:Java伴侣 日期:2007-06-27
上次写的分页查询是先把值取出来,再在Action中进行截取,如:
下面将介绍一种更加高效的截取方法,JSP如下:
**********************
<%@ page language="java" import="java.util.*,java.sql.*" %>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cn" scope="page" class="myConnection.Conn" /><!--引用数据库操作的bean,自己完成,这里不再赘述-->
<%
int curpage=1;//当前页
int page_record=20;//每页显示的记录数
//用下面的方法(sql查询完成,速度快)
curpage=Integer.parseInt(request.getParameter("page"));//获取传递的值,需要显示的页
ResultSet rs=cn.rsexecuteQuery("select top "+page_record+" * from tablename where id not in (select top "+((curpage-1)*page_record)+" id from tablename order by id desc) order by id desc");
//本查询语句得到的是所要显示的1000页的20条记录,大致思路为——子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列
while(rs.next) {
out.println(rs.getInt("id").toString());
}
rs.close();
%>
只需知道当前页数和每页记录数,便可以利用上面的sql语句轻松的截取该页记录。
复制内容到剪贴板 程序代码
//通过PageController对象的一系列运算赋值之后,得到开始行和结束行,再传入原来的集合进行截取
public ArrayList ReCurlist(int pagestartrow,int pageendrow,ArrayList results) //辅助方法
{
ArrayList curpagelist=new ArrayList();
log.info("results:"+results);
for(int i=pagestartrow-1;i<pageendrow;i++)
{
DomainVO domainvo = (DomainVO) results.get(i);
curpagelist.add(domainvo);
}
return curpagelist;
}
public ArrayList ReCurlist(int pagestartrow,int pageendrow,ArrayList results) //辅助方法
{
ArrayList curpagelist=new ArrayList();
log.info("results:"+results);
for(int i=pagestartrow-1;i<pageendrow;i++)
{
DomainVO domainvo = (DomainVO) results.get(i);
curpagelist.add(domainvo);
}
return curpagelist;
}
下面将介绍一种更加高效的截取方法,JSP如下:
**********************
<%@ page language="java" import="java.util.*,java.sql.*" %>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="cn" scope="page" class="myConnection.Conn" /><!--引用数据库操作的bean,自己完成,这里不再赘述-->
<%
int curpage=1;//当前页
int page_record=20;//每页显示的记录数
//用下面的方法(sql查询完成,速度快)
curpage=Integer.parseInt(request.getParameter("page"));//获取传递的值,需要显示的页
ResultSet rs=cn.rsexecuteQuery("select top "+page_record+" * from tablename where id not in (select top "+((curpage-1)*page_record)+" id from tablename order by id desc) order by id desc");
//本查询语句得到的是所要显示的1000页的20条记录,大致思路为——子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列
while(rs.next) {
out.println(rs.getInt("id").toString());
}
rs.close();
%>
只需知道当前页数和每页记录数,便可以利用上面的sql语句轻松的截取该页记录。
评论: 0 | 引用: 0 | 查看次数: 955
发表评论