`
王牌海盗
  • 浏览: 237035 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分页处理类

阅读更多
java 代码
  1. package com.dz.tools;   
  2.   
  3. import java.sql.Connection;   
  4. import java.sql.ResultSet;   
  5. import java.sql.SQLException;   
  6. import java.sql.Statement;   
  7. import java.util.ArrayList;   
  8.   
  9. /**  
  10.  * 用于WEB的分页类(基于ORACLE). 注意:当字段中有","号时,请用"#"号代替 例如:_columnList =  
  11.  * "id,to_char('2007-08-05','yyyy-mm-dd')"中  
  12.  * to_char('2007-08-05','yyyy-mm-dd')中的","号改为"#",应写为: _columnList =  
  13.  * "id,to_char('2007-08-05'#'yyyy-mm-dd')" <br>  
  14.  * <br>  
  15.  *   
  16.  * @author dz  
  17.  * @version 版本号 1.00  
  18.  */  
  19. public class Page {   
  20.   
  21.     private ArrayList list = new ArrayList();// 返回数据集.   
  22.   
  23.     private int tCount = 0;// 总记录数.   
  24.   
  25.     private int tPages = 0;// 总页数.   
  26.   
  27.     private int cPage = 0;// 当前页.   
  28.   
  29.     private int cMinPage = 0;// 当前最小页,用于<<.   
  30.   
  31.     private int cMaxPage = 0;// 当前最大页,用于>>.   
  32.   
  33.     private int offset = 0;// 本页最小记录号.   
  34.   
  35.     private int below = 0;// 本页最大记录号.   
  36.   
  37.     private String first = "";// 第一页.   
  38.   
  39.     private String prev = "";// 上一页.   
  40.   
  41.     private String next = "";// 下一页.   
  42.   
  43.     private String last = "";// 最后一页.   
  44.   
  45.     private int specify = 0;// 指定显示页.   
  46.   
  47.     private ArrayList pageList = new ArrayList();// 页列表   
  48.   
  49.     private int pageListCount = 0;// 所列页总页   
  50.   
  51.     private int maxLine = 0;// 每页最大显示数.   
  52.   
  53.     private String dataSourceName = "";// 数据源名.   
  54.   
  55.     private String tableName = "";// 表名.   
  56.   
  57.     private String columnList = "";// 字段列表.   
  58.   
  59.     private String findCondition = "";// 查询条件.   
  60.   
  61.     private String pageQuery = "";// 页面参数.   
  62.   
  63.     /**  
  64.      * 该类的构造函数,无参数.  
  65.      *   
  66.      */  
  67.     public Page() {   
  68.     }   
  69.   
  70.     /**  
  71.      * 设置数据源名.  
  72.      *   
  73.      * @param dataSourceName  
  74.      *            数据库名  
  75.      */  
  76.     public void setDataSourceName(String dataSourceName) {   
  77.         this.dataSourceName = dataSourceName;   
  78.     }   
  79.   
  80.     /**  
  81.      * 设置表名.  
  82.      *   
  83.      * @param tableName  
  84.      *            表名  
  85.      */  
  86.     public void setTableName(String tableName) {   
  87.         this.tableName = tableName;   
  88.     }   
  89.   
  90.     /**  
  91.      * 设置字段列表.  
  92.      *   
  93.      * @param columnList  
  94.      *            字段列表  
  95.      */  
  96.     public void setColumnList(String columnList) {   
  97.         this.columnList = columnList;   
  98.     }   
  99.   
  100.     /**  
  101.      * 设置字段列表.  
  102.      *   
  103.      * @param columnList[]  
  104.      *            字段列表  
  105.      */  
  106.     public void setColumnList(String[] columnList) {   
  107.         for (int i = 0; i < columnList.length; i++)   
  108.             if (i == columnList.length - 1)   
  109.                 this.columnList += columnList[i];   
  110.             else  
  111.                 this.columnList += columnList[i] + ",";   
  112.     }   
  113.   
  114.     /**  
  115.      * 设置查询条件  
  116.      *   
  117.      * @param findCondition  
  118.      *            查询条件  
  119.      */  
  120.     public void setFindCondition(String findCondition) {   
  121.         this.findCondition = findCondition;   
  122.     }   
  123.   
  124.     /**  
  125.      * 设置页面传递参数,如有多个参数要传递,可多次调用.  
  126.      *   
  127.      * @param key  
  128.      *            参数名  
  129.      * @param value  
  130.      *            参数值  
  131.      */  
  132.     public void setPageQuery(String key, String value) {   
  133.         this.pageQuery += key + "=" + value + "&";   
  134.     }   
  135.   
  136.     /**  
  137.      * 取页面参数.  
  138.      *   
  139.      * @return 页面参数  
  140.      */  
  141.     public String getPageQuery() {   
  142.         return pageQuery;   
  143.     }   
  144.   
  145.     /**  
  146.      * 设置每页最大显示数  
  147.      *   
  148.      * @param maxLine  
  149.      *            每页最大显示数  
  150.      */  
  151.     public void setMaxLine(int maxLine) {   
  152.         this.maxLine = maxLine;   
  153.     }   
  154.   
  155.     /**  
  156.      * 取总页数.  
  157.      *   
  158.      * @return 总页数  
  159.      */  
  160.     public int getTPages() {   
  161.         return tPages;   
  162.     }   
  163.   
  164.     /**  
  165.      * 取当前页.  
  166.      *   
  167.      * @return 当前页  
  168.      */  
  169.     public int getCPage() {   
  170.         return cPage;   
  171.     }   
  172.   
  173.     public String getcPage() {   
  174.         return cPage + "";   
  175.     }   
  176.   
  177.     /**  
  178.      * 取第一页.  
  179.      *   
  180.      * @return 第一页  
  181.      */  
  182.     public String getFirst() {   
  183.         return first;   
  184.     }   
  185.   
  186.     /**  
  187.      * 取上一页.  
  188.      *   
  189.      * @return 上一页  
  190.      */  
  191.     public String getPrev() {   
  192.         return prev;   
  193.     }   
  194.   
  195.     /**  
  196.      * 取下一页.  
  197.      *   
  198.      * @return 下一页  
  199.      */  
  200.     public String getNext() {   
  201.         return next;   
  202.     }   
  203.   
  204.     /**  
  205.      * 取最后一页.  
  206.      *   
  207.      * @return 最后一页  
  208.      */  
  209.     public String getLast() {   
  210.         return last;   
  211.     }   
  212.   
  213.     /**  
  214.      * 取总记录数.  
  215.      *   
  216.      * @return 总记录数  
  217.      */  
  218.     public int getTCount() {   
  219.         return tCount;   
  220.     }   
  221.   
  222.     public void setSpecify(int specify) {   
  223.         this.specify = specify;   
  224.     }   
  225.   
  226.     public int getSpecify() {   
  227.         return specify;   
  228.     }   
  229.   
  230.     /**  
  231.      * 生成页列表. changeCatalog()之后调用  
  232.      *   
  233.      * @param current  
  234.      * @param csum  
  235.      * @return  
  236.      */  
  237.     private void setPageList() {   
  238.   
  239.         int start = 1;   
  240.   
  241.         if (cPage > pageListCount)   
  242.             if (cPage % pageListCount == 0)   
  243.                 start = pageListCount   
  244.                         * ((int) Math.ceil(cPage / pageListCount) - 1) + 1;   
  245.             else  
  246.                 start = pageListCount * (int) Math.ceil(cPage / pageListCount)   
  247.                         + 1;   
  248.   
  249.         cMinPage = start - 1;   
  250.         int end = start + pageListCount;   
  251.         cMaxPage = end;   
  252.         if (end > tPages) {   
  253.             end = tPages;   
  254.             cMaxPage = 0;   
  255.         }   
  256.   
  257.         for (int i = 0; i < pageListCount; i++) {   
  258.             if (start <= tPages) {   
  259.                 pageList.add(new Integer(start));   
  260.                 start++;   
  261.             }   
  262.         }   
  263.   
  264.     }   
  265.   
  266.     public ArrayList getPageList() {   
  267.         return pageList;   
  268.     }   
  269.   
  270.     public void setPageListCount(int pageListCount) {   
  271.         this.pageListCount = pageListCount;   
  272.     }   
  273.   
  274.     public int getCMaxPage() {   
  275.         return cMaxPage;   
  276.     }   
  277.   
  278.     public int getCMinPage() {   
  279.         return cMinPage;   
  280.     }   
  281.   
  282.     /**  
  283.      * 取记录集.  
  284.      *   
  285.      * @return 记录集  
  286.      */  
  287.     public ArrayList getList() {   
  288.         return list;   
  289.     }   
  290.   
  291.     /**  
  292.      * 生成本页参数. 在query()中获取总记录数后,执行SQL之前调用.  
  293.      */  
  294.     private void changeCatalog() {   
  295.         // 总页数   
  296.         tPages = (int) Math.ceil((double) tCount / maxLine);   
  297.   
  298.         // 当前页   
  299.         if (specify == 0) {   
  300.             specify = 1;   
  301.         }   
  302.         if (specify > tPages) {   
  303.             specify = tPages;   
  304.         }   
  305.   
  306.         // 本页最小记录号   
  307.         offset = (specify - 1) * maxLine + 1;   
  308.   
  309.         // 本页最大记录号   
  310.         below = specify * maxLine;   
  311.   
  312.         // 当前页   
  313.         cPage = specify;   
  314.   
  315.         // 首页参数   
  316.         if (specify > 1)   
  317.             first = "?page=1&" + pageQuery;   
  318.         else  
  319.             first = "";   
  320.         // 上页参数   
  321.         if (specify > 1)   
  322.             prev = "?page=" + (specify - 1) + "&" + pageQuery;   
  323.         else  
  324.             prev = "";   
  325.         // 下页参数   
  326.         if (specify < tPages)   
  327.             next = "?page=" + (specify + 1) + "&" + pageQuery;   
  328.         else  
  329.             next = "";   
  330.         // 未页参数   
  331.         if (specify < tPages)   
  332.             last = "?page=" + tPages + "&" + pageQuery;   
  333.         else  
  334.             last = "";   
  335.     }   
  336.   
  337.     /**  
  338.      * 主操作类(使用page). 请在setXXX()之后,getXXX()方法之前调用  
  339.      *   
  340.      * @throws SQLException  
  341.      */  
  342.     public void query() throws SQLException {   
  343.         // 取数据库连接   
  344.         Connection conn = Database.getConnection(dataSourceName);   
  345.         if (conn == null)   
  346.             throw new SQLException("获取数据库连接错误");   
  347.         Statement stmt = null;   
  348.         ResultSet rs = null;   
  349.         try {   
  350.             String sql = "SELECT count(*) FROM " + tableName + " "  
  351.                     + findCondition;   
  352.             stmt = conn.createStatement();   
  353.             rs = stmt.executeQuery(sql);   
  354.             while (rs.next())   
  355.                 tCount = rs.getInt(1);// 总记录数   
  356.             changeCatalog();   
  357.             //System.out.println(tCount);   
  358.             setPageList();   
  359.             // 设置查询语句   
  360.             sql = "SELECT " + columnList.replaceAll("#"",") + " FROM "  
  361.                     + tableName + " " + findCondition;   
  362.             sql = "SELECT rownum r1,t.* FROM (" + sql + ") t";   
  363.             sql = "SELECT r.* FROM (" + sql + ") r WHERE r1 BETWEEN " + offset   
  364.                     + " AND " + below;   
  365.             // System.out.println(specify);   
  366.             //System.out.println(sql);   
  367.   
  368.             // 取记录   
  369.             String[] _row = columnList.split(",");   
  370.             int _rownum = _row.length;   
  371.             rs = stmt.executeQuery(sql);   
  372.             while (rs.next()) {   
  373.                 String[] _temp = new String[_rownum];   
  374.                 for (int i = 0; i < _rownum; i++) {   
  375.                     _temp[i] = rs.getString(i + 2);   
  376.                     // System.out.println(_temp[i]);   
  377.                 }   
  378.                 list.add(_temp);   
  379.             }   
  380.         } finally {   
  381.             if (rs != null)   
  382.                 rs.close();   
  383.             if (stmt != null)   
  384.                 stmt.close();   
  385.             if (conn != null)   
  386.                 conn.close();   
  387.         }   
  388.     }   
  389.   
  390. }   
分享到:
评论

相关推荐

    后台实现 分页处理类java

    对结果集list在代码层面进行分页处理。

    php-paginator分页处理类.zip

     }函数1:根据总页数,当前页,和页分组及url产生分页导航,分页函数参数列表(有多少页,当前页,每页多少个 ,链接地址)。函数2:根据记录数,页列清数,$page,当前页;$row_num记录总数;$pagesize:每页记录数;$url记录...

    常用类 数据库连接类 分页类

    php 常用类,有pdo mysql 分页 常用类,很简单实用的 php类,还有图像处理类等

    处理ajax和html的php分页类.zip

    一个处理ajax分页和html静态化页面分页的类,method 处理环境 设置为 html,问号的位置会自动替换为去向页码或method 处理环境 设置为 ajax,ajax分页跳转页面的javascript方法,ajax_func_name后面的附带参数 默认...

    Mybatis最简单分页处理工具

    简单便捷对商品列表进行分页处理,手把手教你实现,内部有jar和工具类

    java分页模板类<呕心沥血之作>

    自己写的分页类,是通用类,可以直接调用。在struts,spring中都没问题

    javaScript Array数组分页处理

    javaScript:将Array数组分页处理,支持分页数据容错; js文件:Page4array分页处理工具类; 兼容版本ES6。 博文:https://blog.csdn.net/HTouying/article/details/88898258

    php如何分页为什么需要分页类来处理分页

    首先用最通俗的思维给你展示一个不需要分页类的文件是如何来处理分页的,之后再告诉你为什么我们需要把分页给独立的抽出来写成一个类,最重要的是思维方式,学会了它你自己也可以写自己的分页类的。

    ASP分页类 v1.1

    本人原创的ASP分页类,可快速有效的对Recordset对象进行分页处理,大大提升开发效率。 附有网络上常见的分页类例子供测试。数据量100万。 效率,比不上叶子的分页类,但仅次其后... 方便,叶子的分页类:数组。本...

    处理ajax和html的php分页类

    一个处理ajax分页和html静态化页面分页的类,method 处理环境 设置为 html,问号的位置会自动替换为去向页码或method 处理环境 设置为 ajax,ajax分页跳转页面的javascript方法,ajax_func_name后面的附带参数 默认...

    分页处理的PHP类.zip

    显然,你可以允许系统对它进行处理,但是为了获得最佳配置还是使用Vitual Memory Manager (VMM)为好。Windows NT分页文件的基本原则 Windows NT最初通过在物理RAM的数量上加上12MB以设定开始的分页文件大小。这12MB...

    ASP分页类 v1.1.rar

    本人原创的ASP分页类,可快速有效的对Recordset对象进行分页处理,大大提升开发效率。 附有网络上常见的分页类例子供测试。数据量100万。 效率,比不上叶子的分页类,但仅次其后... 方便,叶子的分页类:数组。本...

    ASP分页类代码 v1.1.rar

    本人原创的ASP分页类,可快速有效的对Recordset对象进行分页处理,大大提升开发效率。 附有网络上常见的分页类例子供测试。数据量100万。 效率,比不上叶子的分页类,但仅次其后... 方便,叶子的分页类:数组。本类...

    02内存分页处理(done).zip

    内存分页工具类 * 使用场景:多个查询结果组合后分页的情况 * 1、endNum置为上限,查分页(最大限度可查) * 2、不分页查询,用上限判断(超过上限给提示不能查) * 注意:需要分页的全量数据要设置上限

    Java Web分页工具类

    PageUtils是一个Java工具类,用于简化分页逻辑的处理。它包含以下两个主要部分: 1. PageInfo 内部类:这是一个泛型类,封装了分页所需的信息,包括当前页码、页面大小、总页数、总记录数和当前页的记录列表。 2. ...

    php分页类很完美

    //将处理后的URL的查询字串替换原来的URL的查询字串: $url=str_replace($parse_url["query"],$url_query,$url); //在URL后加page查询信息,但待赋值: if($url_query) $url.="&page;"; else $url.="page"; }else {...

    php常用类(生成静态页,文件上传,mysql操作,列表分页)

    自己写的4个php类,分享一下,代码比较傻瓜,高手就不要下了,嘿嘿 file.php 文件上传类 ...page_class.php 分页处理类 文件里面有使用实例,做小站的可以直接使用,有兴趣共同讨论进步的,加QQ:284358278

    02内存分页处理(done)_02内存分页处理_routet3t_预测_

    * 内存分页工具类 * 使用场景:多个查询结果组合后分页的情况 * 1、endNum置为上限,查分页(最大限度可查) * 2、不分页查询,用上限判断(超过上限给提示不能查) * 注意:需要分页的全量数据要设置上限

    php分页类,加密类,数据库操作类,文件操作类,无限分级类

    php分页类,加密类,数据库操作类,文件操作类,无限分级类,验证类,字符串处理类

Global site tag (gtag.js) - Google Analytics