博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分页查询
阅读量:5152 次
发布时间:2019-06-13

本文共 6219 字,大约阅读时间需要 20 分钟。

 

 

一、分页查询的优势:

    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
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 block16             e.printStackTrace();17            }finally{18               this.closeResource();19          }20    21       }22         return count;23      }24      //分页查询列表25      @Override26      public List
getPageNewsList(int pageNo, int pageSize) {27         // TODO Auto-generated method stub28         List
newsList = new ArrayList
();           //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 block50               e.printStackTrace();51            }finally{52               this.closeResource();53            }54    55           }56   57             return newsList;58        }

    Biz层:

      Biz类:

 

 

        

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

 

      BizImpl类:

@Override    public int getNewsCount() {        // TODO Auto-generated method stub        return newsDao.getNewsCount();    }    @Override    public List
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;        }    }        }

 

转载于:https://www.cnblogs.com/fifiyong/p/5928181.html

你可能感兴趣的文章
使用easyUI 为datagrid冻结列
查看>>
bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
查看>>
利用Git版本控制管理你的项目
查看>>
windows下使用pycharm开发基于ansible api的python程序
查看>>
错误 warning: LF will be replaced by CRLF in README.md.
查看>>
博客园修改鼠标图标样式
查看>>
LInux CentOS7 vsftpd 配置注释
查看>>
Linux CentOS7 httpd 配置注释
查看>>
Sqlserver2012 评估期已过问题
查看>>
关于jquery attr()与prop() 的区别
查看>>
C#调用C++DLL/天地伟业解码器二次开发
查看>>
zend framework 1 连接oracle数据库的写法
查看>>
APUE学习笔记:第九章 进程关系
查看>>
关于 阿里云 的linux 安装 jdk和tomcat 中的问题(解压版的jdk和tomcat)
查看>>
Logstash_Apache日志采集
查看>>
使用localStorage保存搜索记录
查看>>
PHP队列
查看>>
PhpStudy 升级 MySQL 版本到5.7
查看>>
程序代码记Log
查看>>
ORACLE 11G使用用EXPDP导出时,空表不能导出
查看>>