`
王牌海盗
  • 浏览: 239139 次
  • 性别: 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在代码层面进行分页处理。

    java分页工具类(非常实用)

    "java分页工具类" Java分页工具类是Java语言中的一种常用工具类,用于实现分页功能。下面是该工具类的详细知识点: 1. 分页工具类的作用 分页工具类的主要作用是将大量数据分页显示,以便用户更方便地浏览和操作...

    mvc分页辅助类

    5. **获取当前页数据**:可能有一个方法用于获取当前页的数据,这通常涉及到数据库查询的分页处理。 6. **自定义配置**:可能允许开发者通过设置属性来自定义分页的样式、页码间隔、是否显示第一页和最后一页等。 ...

    ASP分页通用类 asp分页

    ASP分页技术是Web开发中一个非常重要的概念,特别是在处理大量数据时,为了提高用户体验,通常需要将数据分块显示,而不是一次性加载所有内容。在ASP(Active Server Pages)环境中,实现分页功能通常需要编写自定义...

    一个很好的分页类php分页类

    在`test.php`中,可能是对分页类的测试代码,它会实例化分页类,传入必要的参数,然后展示或处理分页后的数据。测试代码通常包括以下步骤: 1. **连接数据库**:建立到数据库的连接,并执行查询操作以获取所有记录...

    分页工具类分页工具类

    在IT领域,分页工具类是数据库操作和Web开发中常用的一种组件,它主要用于处理大量数据的展示,避免一次性加载所有数据导致的性能问题。在实际应用中,分页可以帮助用户更加高效地浏览和管理信息,提高用户体验。...

    php封装的page分页类.zip

    "php封装的page分页类" 是一个专门用于处理这种需求的类库,它简化了PHP分页的实现过程,通过封装核心逻辑,使开发者能够快速、高效地实现分页功能。 首先,我们要理解分页的基本原理。在数据库查询中,如果一次性...

    asp.net 分页类

    ASP.NET 分页类是用于处理大量数据并分批次显示的关键技术,它允许用户在Web应用程序中轻松地浏览大型数据集,提高用户体验,并减轻服务器负担。相比于Visual Studio (VS) 自带的分页控件,自定义分页类提供了更高的...

    asp分页类,套用方便,收藏

    5. **错误处理**:良好的分页类应该包含错误处理机制,以应对可能出现的问题,如无效的页码输入或数据库连接问题。 6. **重用性与灵活性**:一个优秀的分页类应设计成可复用的,允许开发者自定义样式、链接格式等,...

    分页 jsp 分页类 java

    在Web开发中,分页是一种常见的用户界面设计技术,它用于处理大量的数据并提供良好的用户体验。当数据库中的数据量过大,一次性加载所有记录会导致页面加载速度慢,甚至可能导致内存溢出。因此,分页成为了一个必不...

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

    本资源包包含了一些基本但非常实用的PHP类,主要包括数据库连接类、分页类以及图像处理类。接下来,我们将详细介绍这些类及其相关知识点。 1. **数据库连接类**: - PDO (PHP Data Objects):PDO 是 PHP 提供的一...

    oracle 分页类文件

    Oracle数据库在处理大数据量时,分页查询是必不可少的功能,它可以有效地提高数据检索效率,减少内存占用,并提供更好的用户体验。本文件包包含了一系列用于实现Oracle数据库分页查询的类,帮助开发者解决分页问题。...

    java分页大全 包括最强大的java分页类

    "page.rar"可能包含了一个分页工具类,这类工具通常提供静态方法,接收SQL查询语句、每页大小和当前页码作为参数,然后返回处理后的SQL和分页参数。这样的设计使得在代码中调用分页功能变得简单易行,同时也易于维护...

    Java分页处理

    ### Java分页处理 #### 一、引言与背景 在Web开发中,尤其是在使用Java进行Web开发时,分页处理是一项极其重要的技术。当数据量较大时,如果不使用分页,不仅会导致页面加载时间过长,降低用户体验,还会增加...

    SSH集成+分页抽象类+自定义标签 == 分页数据效果

    `PageTag`类通常包含处理分页逻辑的方法,如计算总页数、获取当前页数据等。同时,需要创建对应的标签描述文件`t32.tld`,定义标签的属性、行为以及与`PageTag`类的关联。在JSP页面中,我们可以通过`&lt;t32:page&gt;`这样...

    java分页工具类

    总之,Java分页工具类是Java开发中的重要组件,它通过合理地组织数据查询和处理,提供了便捷的分页解决方案,使得大规模数据的处理变得轻而易举。在实际应用中,我们可以根据项目需求对工具类进行适当的定制和优化,...

    e路JS分页样式类,e路JS分页样式类

    在网页开发中,分页是常见的功能之一,用于处理大量数据的展示,使得用户能够方便地浏览和导航。"e路JS分页样式类"是一个专门针对JavaScript实现的分页样式库,它提供了美观的界面和友好的用户体验。在这个主题中,...

    高效asp分页类,带例子

    总结来说,"高效asp分页类"是一个能够有效处理大数据分页的工具,它通过优化数据查询、使用缓存、参数化查询以及良好的用户界面设计,实现了在处理1000000条数据时几乎无停顿的快速分页效果。`ListPage.Asp`可能是一...

    java分页工具类,以及基于Struts,Spring,mybatis,jsp中分页的调用及实现

    例如,在`execute()`方法中进行分页处理,并将处理后的`PageUtils`对象传递给视图层。 ##### 2. Spring 在Spring框架下,可以利用`@ModelAttribute`注解将`PageUtils`对象注入到控制器方法中。通过`@RequestParam`...

Global site tag (gtag.js) - Google Analytics