• 分页查询


    一、分页查询的优势:

        1.数据清晰直观

        2.页面不在冗长

        3.不受数据量的限制

    分页查询的实现方法

        1.编写分页查询sql语句

        2.编写分页查询方法

        3.实现分页查询显示

    二、分页的两个部分

        1.数据分页查询

        2.数据分页显示

     

    三、数据分页查询的实现步骤 

        1.确定每页显示的数据数量

        2.确定需要显示的数据总数量

          //编写查询信息总数量的sql语句

          String sql="select count(*) from detail";

          //通过JDBC进行SQL语句执行

          Object[] paramas={};

          ResultSet rs=this.executeSQL(sql,params);

          //获取总记录数

          totalCount=rs.getInt(1);

        3.计算显示的页数

          //总页数

          private int totalPageCount=1;

          //页面大小,每页显示的记录数

          private int pageSize=0;

          //记录总数

          private int recordCount=0;

          //设置总页数

          private void setTotalPageCountByRs(){

            if(this.recordCount%this.pageSize==0){

              this.totalPageCount=this.recordCount/this.pageSize;

            }else if(this.recordCount%this.pageSize>0){

              this.totalPageCount=this.recordCount/this.pageSize+1;

            }else{

              this.totalPageCount=0;

            }

          }

        4.编写分页查询SQL语句      

          select *
          from(select book.*,rownum r
          from (select * from bs_books)book
          where rownum <= (page_NO*page_books) )temp
          where temp.r > ((page_NO-1)*page_books);

        5.实现分页查询

          List<News> newsList-new ArrayList<News>();

          //编写分页查询SQL语句

          String sql="select id,title,author,createdate from

                 (select id,title,author,createdate,rowmun rn from detail)

                  a where a.rn>=? and a.rn<=?";

          Page page=new Page();

          page.setCurrPageNo(pageNo);//设置当前页码

          page.setPageSize(pageSize);//每页显示记录数

          //计算sql语句的起始记录数以及结束记录数的行数

          int startRow=page.getStartRow();

          int endRow=page.getEndRow();

          Object[] params={startRow,endRow};

          ResultSet rs=this.executeSQL(sql,params);

        数据分页查询的实现的关键点:

          1.计算总页数

            如果总记录数能被每页显示记录数整除:

                总页数=总记录数/每页显示记录数

            如果总记录数不能被每页显示记录数整除:

                总页数=总记录数/每页显示记录数+1

          2.计算分页查询时的起始记录数与结束记录数

            起始记录数:(当前页码-1)*每页显示的记录数+1

            结束记录数:当前页码*每页显示的记录数  

    四、数据分页显示

    在项目中的使用方法是:

      使用JDBC操作数据库

      在Dao层:

        Dao类:

           

    //获取新闻总数
           public int getNewsCount();
            //分页查询列表
          public List<News> getPageNewsList(int pageNo, int pageSize);

         DaoImpl类:

          

     1 //获取新闻总数
     2        @Override
     3        public int getNewsCount() {
     4           // TODO Auto-generated method stub
     5           int count = 0;
     6           String sql = "select count(*) as count from news_detail";
     7           Object[] params = {};
     8           if(this.getConnection()){
     9              ResultSet rs = this.executeSQL(sql, params);
    10              try {
    11                 if(rs.next()){
    12                  count = rs.getInt("count");
    13                 }
    14             } catch (SQLException e) {
    15             // TODO Auto-generated catch block
    16             e.printStackTrace();
    17            }finally{
    18               this.closeResource();
    19          }
    20    
    21       }
    22         return count;
    23      }
    24      //分页查询列表
    25      @Override
    26      public List<News> getPageNewsList(int pageNo, int pageSize) {
    27         // TODO Auto-generated method stub
    28         List<News> newsList = new ArrayList<News>();
              //MySQL数据库的查询
    29         String sql = "SELECT id,title,author,createDate FROM news_detail " + 30                     "ORDER BY createDate DESC LIMIT ?,?"; 31         pageNo = (pageNo-1)*pageSize; 32         //sql的参数,两个问号处 33         Object[] params = {pageNo,pageSize}; 34    35         if(this.getConnection()){ 36            ResultSet rs = this.executeSQL(sql, params); 37            try { 38               while(rs.next()){ 39                  News news = new News(); 40                  news.setId(rs.getInt("id")); 41                  news.setTitle(rs.getString("title")); 42                  news.setAuthor(rs.getString("author")); 43                  news.setCreateDate(rs.getTimestamp("createDate")); 44       45                  newsList.add(news); 46       47               } 48            } catch (SQLException e) { 49               // TODO Auto-generated catch block 50               e.printStackTrace(); 51            }finally{ 52               this.closeResource(); 53            } 54     55           } 56    57             return newsList; 58        }

        Biz层:

          Biz类:

     

            

    //获取新闻信息总数量
        public int getNewsCount();
        
        //获取分页列表
        public List<News> getPageNewsList(int pageNo,int pageSize);
    View Code

          BizImpl类:

    @Override
        public int getNewsCount() {
            // TODO Auto-generated method stub
            return newsDao.getNewsCount();
        }
    
    
    
        @Override
        public List<News> getPageNewsList(int pageNo, int pageSize) {
            // TODO Auto-generated method stub
            return newsDao.getPageNewsList(pageNo, pageSize);

        util工具类:

    //分页查询的工具类,在前台分页显示时使用
    public class PageSupport {
        
        //总页数
        private int totalPageCount = 1;
        
        //总记录数
        private int totalCount = 0;
        
        //当前页码
        private int currentPageNo = 1;
        
        //页面容量
        private int pageSize = 0;
      
      
      //set、get方法
    public int getTotalPageCount() { return totalPageCount; } public void setTotalPageCount(int totalPageCount) { this.totalPageCount = totalPageCount; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) {     //总记录数大于零,就可以调用计算总页数的方法了
          if(totalCount > 0){ this.totalCount = totalCount; //设置总页数 this.setTotalPageCountByRs(); } } public int getCurrentPageNo() { return currentPageNo; } public void setCurrentPageNo(int currentPageNo) { if(currentPageNo > 0){ this.currentPageNo = currentPageNo; } } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { if(pageSize > 0){ this.pageSize = pageSize; } } //计算总页数的方法 public void setTotalPageCountByRs(){ if(this.totalCount % this.pageSize == 0){ this.totalPageCount = this.totalCount / this.pageSize; }else if(this.totalCount % this.pageSize > 0){ this.totalPageCount = this.totalCount / this.pageSize + 1; }else{ this.totalPageCount = 0; } } }
  • 相关阅读:
    C#--C/S--学员管理系统--6--班级和下拉框的数据绑定
    C#--C/S--学员管理系统--5--通用验证类的设计和程序退出
    1046. 最后一块石头的重量
    1029. 两地调度
    1005. K 次取反后最大化的数组和
    944. 删列造序
    874. 模拟行走机器人
    860. 柠檬水找零
    map按值排序
    map按键排序
  • 原文地址:https://www.cnblogs.com/fifiyong/p/5928181.html
Copyright © 2020-2023  润新知