• jsp+oracle 排序分页+Pageutil类


     

    1.rownum和排序

     

    Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。

     

    SQL> select rownum ,id,name from student order by name;

     

         ROWNUM ID      NAME

     

              3 200003 李三

     

              2 200002 王二

     

              1 200001 张一

     

              4 200004 赵四

     

    可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询

     

    SQL> select rownum ,id,name from (select * from student order by name);

     

         ROWNUM ID      NAME

     

              1 200003 李三

     

              2 200002 王二

     

              3 200001 张一

     

              4 200004 赵四

     

    这样就成了按name排序,并且用rownum标出正确序号(有小到大)

     

    以前分页习惯用这样的SQL语句:

     

    select * from

     

    (select t.*,rownum row_num from mytable t order by t.id) b

     

    where b.row_num between 1 and 10

     

    结果发现由于该语句会先生成rownum 后执行order by 子句,因而排序结果根本不对,后来在GOOGLE上搜到一篇文章,原来多套一层select 就能很好的解决该问题,特此记录,语句如下:

     

    select * from

     

    (select a.*,rownum row_num from

     

    (select * from mytable t order by t.id desc) a

     

    ) b where b.row_num between 1 and 10 

    2.分页排序

    主要思想:采用PageUtil类和用基于rownum的排序分页技术得到每页的内容。

    (1)使用上一文章的pageutil类

    (2)在查询类里得到结果

    public List showList(int start,int end)
    {
    List<Oplist> listShow = new ArrayList<Oplist>();
    DB_OPER db=new DB_OPER();
    String s=select * from(select a.*,rownum row_num from(select * from mytable t order by t.id desc) a) b where b.row_num between 1 and 10”;

     Result result=db.executeQuery(s);

    ......//将result转为list

    return listShow;

    }

    //得到总行数 

    public int AllCount()
    {
    DB_OPER db=new DB_OPER();
    Result result=db.executeQuery("select count(*) as count from a");
    Map row = result.getRows()[0];
    int size=Integer.parseInt(row.get("count").toString());
    return size;
    }

    (3)在jsp页面查询

    <%listOper db=new listOper();
    int size=0;
    size=db.AllCount();//得到总数
    //System.out.println(size);
    String pageStr = request.getParameter("page");
    int currentPage = 1;
    if (pageStr != null)
    currentPage = Integer.parseInt(pageStr);
    PageUtil pUtil = new PageUtil(15, size, currentPage);
    currentPage = pUtil.getCurrentPage();
    System.out.println("start:"+pUtil.getFromIndex());
    System.out.println("end:"+pUtil.getToIndex());
    List result=db.showList(pUtil.getFromIndex()+1, pUtil.getToIndex());

    %>

    (3)在jsp页面显示结果

    <%

    for (int i = 0; i <result.size() ; i++) {
    Oplist model = (Oplist) result.get(i);
    out.print("<TR class='alter'><TD>"+(i+1+pUtil.getFromIndex())+"</TD>");
    out.print("<TD>"+model.getLcbh()+"</>");
    out.print("<TD>"+model.getFwsx()+"</TD>");

    %>

  • 相关阅读:
    js外观模式
    微服务架构的基础框架选择:Spring Cloud还是Dubbo?
    JAVA 中BIO,NIO,AIO的理解
    Reactor和Proactor模式的讲解(关于异步,同步,阻塞与非阻塞)
    JVM(Java虚拟机)优化大全和案例实战
    php编译安装后,加扩展模块
    mysql查所有列名
    cannot get uid for user 'www'
    rabbitmq management Login Failed
    nginx 安装过程中的not found
  • 原文地址:https://www.cnblogs.com/zzlp/p/5174716.html
Copyright © 2020-2023  润新知