zoukankan      html  css  js  c++  java
  • Javamysql实现分页查询分页显示

      当数据库中数据条数过多时,一个页面就不能显示,这是要设置分页查询,首先要使用的是数据库sql语句的limit条件实现分组查询
    sql语句大概形式为:
      select * from table limit 开始索引,显示条数
      用该语句就会实现分块查询,并且每页显示固定条数。

      (由于limit是mysql特有的,如果是Oracle数据库的话就需要通过rownum来限制比如:select * from table where rownum >=开始索引。如果是sql sever数据库的话可以用到top关键字,如取m到n条数据:select top (n-m+1) id from table where id not in (select top m-1 id from table))
    首先要实现后台分页,我们需要知道它有多少页,每页有多少行,这就需要知道一共多少行,调用sql语句时还需要知道每一页的开始索引,开始索引是根据当前页数算出来的,所以还需要知道当前页数,查询后会返回一个列表存储当前页数据。将这些属性及获取设置的方法封装成一个类就有了下面的page类:

     1 public class Page<T> {
     2     private List<T> data;//数据列表
     3     private int pagenum;//当前页数
     4     private int pagesize;//当前页显示条数
     5     private int rows;//总行数
     6     public Page(int rows,int pagenum, int pagesize) {
     7         super();
     8         data=new ArrayList<>();
     9         this.rows=rows;
    10         this.setPagesize(pagesize);
    11         this.setPagenum(pagenum);        
    12     }
    13     public Page() {
    14         super();
    15     }
    16     public int getPagenum() {
    17         return pagenum;
    18     }
    19     public void setPagenum(int pagenum) {
    20         if(pagenum>getTotalpage())
    21         {
    22             this.pagenum=getTotalpage();
    23         }
    24         else {
    25             this.pagenum = pagenum;
    26         }    
    27         if(pagenum<1)
    28         {
    29             this.pagenum=1;
    30         }
    31     }
    32     public int getPagesize() {
    33         return pagesize;
    34     }
    35     public void setPagesize(int pagesize) {
    36         this.pagesize = pagesize;
    37     }
    38     public int getTotalpage() {
    39         //计算总页数
    40         if(rows%pagesize==0)
    41         {
    42             return rows/pagesize;
    43         }
    44         else {
    45             return rows/pagesize+1;
    46         }        
    47     }
    48     public int getRows() {
    49         return rows;
    50     }
    51     public void setRows(int rows) {
    52         this.rows = rows;
    53     }
    54     public int getIndexnum() {
    55         //获取索引值
    56         return pagesize*(pagenum-1);
    57     }
    58     public List<T> getData() {
    59         return data;
    60     }
    61     public void setData(List<T> data) {
    62         this.data = data;
    63     }
    64 }
    Page类

    初始化时我们只需要获得数据总条数,页数及每页显示条数。数据总条数可以用sql语句select count(*)from table 获得。每次查询时只需要传入当前页数就可以了。将每次查询后的page对象传入jsp前台页面,并以一个div来显示

     1 <div>
     2         <a href="/stuent8.11/stuServlet?pagenum=1">首页</a>
     3         <a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum-1 }">上一页</a>
     4         <c:choose>
     5             <c:when test="${apage.totalpage<=5 }">
     6                 <c:set var="begin" value="1"></c:set>
     7                 <c:set var="end" value="${apage.totalpage }"></c:set>
     8             </c:when>
     9             <c:when test="${apage.totalpage>5 }">
    10                 <c:set var="begin" value="1"></c:set>
    11                 <c:set var="end" value="5"></c:set>
    12                 <c:if test="${apage.pagenum>3 }">
    13                     <c:set var="begin" value="${apage.pagenum-2 }"></c:set>
    14                     <c:set var="end" value="${apage.pagenum+2 }"></c:set>
    15                 </c:if>
    16                 <c:if test="${end>apage.totalpage }">
    17                     <c:set var="begin" value="${apage.totalpage-4 }"></c:set>
    18                     <c:set var="end" value="${apage.totalpage }"></c:set>
    19                 </c:if>
    20             </c:when>
    21         </c:choose>
    22         <c:forEach begin="${begin }" end="${end }" step="1" var="num">
    23             <c:if test="${apage.pagenum==num }">
    24                 [${num }]
    25             </c:if>
    26             <c:if test="${apage.pagenum!=num }">
    27                 <a href="/stuent8.11/stuServlet?pagenum=${num }">${num }</a>    
    28             </c:if>
    29         </c:forEach>
    30         <a href="/stuent8.11/stuServlet?pagenum=${apage.pagenum+1 }">下一页</a>
    31         <a href="/stuent8.11/stuServlet?pagenum=${apage.totalpage }">末页</a>
    32     </div>
    显示div

    其中的一个choose是用于规定页面显示的最大页数,这里是5页,就是说当点到第4页时,第1页就会消失,出现第6页。

    人生如水,不争高山,自然愈下,三年又三年。——struggle!
  • 相关阅读:
    发送邮件
    C#操作Excel总结
    注意!监控MySQL服务是否正常,懂这4种方法就可以了
    Linux磁盘空间爆满怎么办?定时文件清理脚本配置实现
    Linux 服务器必备的安全设置,建议收藏!
    MySQL入门到精通:MySQL 选择数据库
    TIOBE3月榜单公布!C 语言稳居第一,将新增功能,消除差异
    C++如何读取带空格字符串?这5种方法教会你
    C语言丨二分查找算法详解(含示例代码)
    线上故障了!居然是因为Linux磁盘缓存机制导致的
  • 原文地址:https://www.cnblogs.com/PersistWp/p/7360000.html
Copyright © 2011-2022 走看看