07-06
27

利用高效的SQL分页查询

      上次写的分页查询是先把值取出来,再在Action中进行截取,如:
//通过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;
    }


        下面将介绍一种更加高效的截取方法,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语句轻松的截取该页记录。

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 分页
相关日志:
评论: 0 | 引用: 0 | 查看次数: 955
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭