分页查询

 

 

一、分页查询的优势:

    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; } } }

 

posted @ 2016-10-02 21:56  wuyongwork  阅读(1713)  评论(0编辑  收藏  举报