由于是写分页的,当然也是要有一个page的类,具体代码如下,由于有很多注释,不用一一介绍了:
package com.util;
/** * Title: 分页对象
* Description: 用于包含数据及分页信息的对象
*Page类实现了用于显示分页信息的基本方法,但未指定所含数据的类型, *可根据需要实现以特定方式组织数据的子类,
*如RowSetPage以RowSet封装数据,ListPage以List封装数据
* Copyright: Copyright (c) 2002
* @author evan_zhao@hotmail.com
* @version 1.0 */ public class Page implements java.io.Serializable { public static final Page EMPTY_PAGE = new Page(); public static final int DEFAULT_PAGE_SIZE = 2; public static final int MAX_PAGE_SIZE = 2;
private int myPageSize = DEFAULT_PAGE_SIZE;
private int start; private int avaCount,totalSize; private Object[][] data=null;
private int currentPageno; private int totalPageCount;
/** * 默认构造方法,只构造空页 */ public Page(){ this.init(0,0,0,DEFAULT_PAGE_SIZE,null); } /** *构造分页对象 *@param crs 包含一页数据的OracleCachedRowSet *@param start 该页数据在数据库中的起始位置 *@param totalSize 数据库中包含的记录总数 *@param pageSize 本页能容纳的记录数 */ public Page(Object[][] crs, int start, int totalSize, int pageSize) { try{ int avaCount=0; if (crs!=null) { avaCount = crs.length; } data = crs; this.init(start,avaCount,totalSize,pageSize,data); }catch(Exception ex){ throw new RuntimeException(ex.toString()); } }
/** * 分页数据初始方法 * @param start 本页数据在数据库中的起始位置 * @param avaCount 本页包含的数据条数 * @param totalSize 数据库中总记录条数 * @param pageSize 本页容量 * @param data 本页包含的数据 */ protected void init(int start, int avaCount, int totalSize, int pageSize, Object[][] data){
this.avaCount =avaCount; this.myPageSize = pageSize;
this.start = start; this.totalSize = totalSize;
this.data=data;
//System.out.println("avaCount:"+avaCount); //System.out.println("totalSize:"+totalSize); if (avaCount>totalSize) { //throw new RuntimeException("记录条数大于总条数?!"); }
this.currentPageno = (start -1)/pageSize +1; this.totalPageCount = (totalSize + pageSize -1) / pageSize;
if (totalSize==0 && avaCount==0){ this.currentPageno = 1; this.totalPageCount = 1; } //System.out.println("Start Index to Page No: " + start + "-" + currentPageno); }
public Object[][] getData(){ return this.data; }
/** * 取本页数据容量(本页能包含的记录数) * @return 本页能包含的记录数 */ public int getPageSize(){ return this.myPageSize; }
/** * 是否有下一页 * @return 是否有下一页 */ public boolean hasNextPage() { /* if (avaCount==0 && totalSize==0){ return false; } return (start + avaCount -1) < totalSize; */ return (this.getCurrentPageNo() }
/** * 是否有上一页 * @return 是否有上一页 */ public boolean hasPreviousPage() { /* return start > 1; */ return (this.getCurrentPageNo()>1); }
/** * 获取当前页第一条数据在数据库中的位置 * @return */ public int getStart(){ return start; }
/** * 获取当前页最后一条数据在数据库中的位置 * @return */ public int getEnd(){ int end = this.getStart() + this.getSize() -1; if (end<0) { end = 0; } return end; }
/** * 获取上一页第一条数据在数据库中的位置 * @return 记录对应的rownum */ public int getStartOfPreviousPage() { return Math.max(start-myPageSize, 1); }
/** * 获取下一页第一条数据在数据库中的位置 * @return 记录对应的rownum */ public int getStartOfNextPage() { return start + avaCount; }
/** * 获取任一页第一条数据在数据库中的位置,每页条数使用默认值 * @param pageNo 页号 * @return 记录对应的rownum */ public static int getStartOfAnyPage(int pageNo){ return getStartOfAnyPage(pageNo, DEFAULT_PAGE_SIZE); }
/** * 获取任一页第一条数据在数据库中的位置 * @param pageNo 页号 * @param pageSize 每页包含的记录数 * @return 记录对应的rownum */ public static int getStartOfAnyPage(int pageNo, int pageSize){ int startIndex = (pageNo-1) * pageSize + 1; if ( startIndex < 1) startIndex = 1; //System.out.println("Page No to Start Index: " + pageNo + "-" + startIndex); return startIndex; }
/** * 取本页包含的记录数 * @return 本页包含的记录数 */ public int getSize() { return avaCount; }
/** * 取数据库中包含的总记录数 * @return 数据库中包含的总记录数 */ public int getTotalSize() { return this.totalSize; }
/** * 取当前页码 * @return 当前页码 */ public int getCurrentPageNo(){ return this.currentPageno; }
/** * 取总页码 * @return 总页码 */ public int getTotalPageCount(){ return this.totalPageCount; }
}
|