一个分页类
[作者]:菩提树下的杨过 [来源]:互联网 [收录时间]:2007-8-1 20:16:51


抽象类
==========================================================
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.ResultSet;

import com.xxx.util.DBTool;


/**
*

* 分页类.默认页面大小为20
* 这是一个抽象类。子类需要重构方法selResult()
*

*/
public abstract class PageList {

/** 以下成员变量在子类中可视 */
protected final static int MIN_PAGE_SIZE = 20; //默认页面大小
protected int pageSize; //页面大小
protected int curPage; //当前页页码
protected int prePage; //上一页页码
protected int nxtPage; //下一页页码
protected int totalPage; //总页码数
protected int totalItem; //总条目数
protected String sql; //选择条件
protected ArrayList result; //结果集
protected int from; //开始的游标位置

/** 私有变量 */
private boolean hasFindResult = false; //标志是否已经查找了结果
//保证loadResult只进行一次


/**
* 构造器.默认页面大小为20
* @param sql
* @param pageNo
*/
public PageList(String sql, int pageNo) {
init(sql, MIN_PAGE_SIZE, pageNo);
}

/**
* 构造器
* @param sql 条件SQL
* @param pageSize 页面大小
* @param pageNo 页码
*/
public PageList(String sql, int pageSize, int pageNo) {
init(sql, pageSize, pageNo);
}

protected void init(String sql, int pageSize, int pageNo) {
this.sql = sql;
this.pageSize = (pageSize<=0?MIN_PAGE_SIZE:pageSize);
this.curPage = (pageNo<=0?1:pageNo);
}

/**
* 获取页面大小
*/
public int getPageSize() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.pageSize;
}

/**
* 获取当前页码
*/
public int getCurPage() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.curPage;
}

/**
* 获取前一页的页码
*/
public int getPrePage() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.prePage;
}

/**
* 获取后一页的页码
*/
public int getNxtPage() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.nxtPage;
}

/**
* 获取页码总数
*/
public int getTotalPage() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.totalPage;
}

/**
* 获取总条数
*/
public int getTotalItem() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.totalItem;
}

/**
* 判断是否有页面
* @return 如果总页面数为0,那么返回false;否则true
*/
public boolean hasPages() {
if (!this.hasFindResult) {
this.loadResult();
}
return (this.totalPage != 0);
}

/**
* 获取指定页面的结果集
*
* @return 指定页面结果集;如果没有则返回空集
*/
public ArrayList getResult() {
if (!this.hasFindResult) {
this.loadResult();
}
return this.result;
}

/**
* 选出结果
*/
protected abstract ArrayList selResult();


/**
* 计算页码信息并且得到结果集.
* 是calculatePageNoInfo和selResult的组合
*/
private void loadResult() {
//1.计算页码相关信息
this.calculatePageNoInfo();
//2.选出结果
this.result = this.selResult();
if (this.result == null) {
this.result = new ArrayList();
&进入讨论组讨论。
更多专题 【深 度 阅 读】 相 关 文 章