抽象类
==========================================================
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.ResultSet;
import com.xxx.util.DBTool;
/**
* <pre>
* 分页类.默认页面大小为20
* 这是一个抽象类。子类需要重构方法selResult()
* </pre>
*/
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();
}
//3. 保证loadResult()只进行一次
hasFindResult = true;
}
/**
* 计算页码相关信息 calculate
*/
private void calculatePageNoInfo() {
//1. 获取总条目数量
this.totalItem = totalItem();
//2. 计算页码信息
//2.1 总页数
if (this.totalItem == 0) {
this.totalPage = 0;
} else {
this.totalPage = (this.totalItem-1) / this.pageSize + 1;
}
//2.2 当前页,前页,后页
if (this.totalPage == 0) {
this.curPage = 0;
this.prePage = 0;
this.nxtPage = 0;
this.from = 0;
} else {
this.curPage = (this.curPage>this.totalPage?this.totalPage:this.curPage);
this.prePage = ((this.curPage-1<1)?1:(this.curPage-1));
this.nxtPage = ((this.curPage==this.totalPage)?this.curPage:(this.curPage+1));
this.from = (this.curPage-1)*this.pageSize;
}
}
/**
* 获取总条目数量
*/
private int totalItem() {
//access db
int count = 0;
DBTooldb = new DBTool();
ResultSet rs = null;
db.connDB();
rs = db.advQuery(this.sql);
try {
while (rs.next()) {
count++;
}
} catch (Exception e) {
}
db.closeDB();
return count;
}
}
//~
使用
===========================================================
假设我有一个News实体对象,现在要构造一个News相关的分页类
如下:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.xxx.util.DBTool;
import com.bokesoft.util.PageList;
import com.bokesoft.util.DateUtil;
/**
* 新闻分页类
*/
public class NewsPageList extends PageList {
public NewsPageList(String sql, int pageNo) {
super(sql, pageNo);
}
public NewsPageList(String sql, int pageSize, int pageNo) {
super(sql, pageSize, pageNo);
}
protected java.util.ArrayList selResult() {
java.util.ArrayList result = new java.util.ArrayList(this.pageSize);
if (this.totalItem == 0) {
return result;
}
News news = null;
DBTool db = new DBTool();
ResultSet rs = null;
db.connDB();
rs = db.advQuery(this.sql);
if (rs != null) {
try { //一旦有异常被捕捉就结束循环
int count = 1;
if (this.curPage > 1) {
rs.absolute(this.from); //跳转到开始行
}
while (rs.next() && count<=pageSize) {
//循环构造news对象,然后加入列表中
news = new News();
news.setId(rs.getString("code")==null?"":rs.getString("code"));
......
result.add(news);
count++;
}
} catch (Exception e) {
} finally {
try { if (rs != null) rs.close();} catch (SQLException sqle) {}
}
}
db.closeDB();
return result;
}
}
//~
客户程序的使用(jsp中)
========================================================
<%
//获得跳转的页码和显示条目数量以及选择条件
//...
//int iPageNo
//int iPageSize
//String sqlCond
//这里是具体使用分页类的部分,非常简单
NewsPageList npl = new NewsPageList(sqlCond, iPageSize, iPageNo);
java.util.ArrayList resultList = npl.getResult();
int totalPage = npl.getTotalPage();
News news = null;
int size = resultList.size();
for (int i=0; i<size; i++) {
news = (News)resultList.get(i);
//.....
}
%>
分享到:
相关推荐
在PHP开发中,分页是不可或缺的一个功能,特别是在处理大量数据时,为了提高用户体验和页面加载速度,分页显得尤为重要。本压缩包“超强php分页打包 通用分页 万能分页 ajax分页 google分页”提供了一系列的分页解决...
PHP超强分页类不仅提供了基础的分页功能,还支持自定义显示模式、AJAX分页等功能,使得开发者能够根据项目需求灵活地配置和使用。通过简单的API调用即可快速实现高效、美观的分页效果,大大提高了开发效率。
标题提到的“.net超强分页控件”可能是指一个功能强大、性能高效的分页组件,用于提高Web应用的用户体验和性能。 分页技术的核心在于如何有效地管理和显示大量数据。在.NET环境中,我们有多种方式来实现分页,包括...
《超强多功能分页组件》是一款专门用于数据展示的控件,它在数据库相关应用中扮演着重要的角色。分页是大型数据集管理的关键技术,它允许用户以更易管理和消化的方式浏览大量的信息,而不是一次性加载所有数据。这款...
类中还提供了几个属性和方法来定制分页功能。例如,`SetPageTag`允许设置用于区分唯一记录的字段,这通常是主键字段。`PageSize`则允许用户自定义每页显示的记录数量。此外,类内部还维护了如`RsNum`(数据总量)、`...
【标题】:“超强多功能分页组件(推荐)” 在ASP.NET开发中,分页功能是构建大型Web应用程序不可或缺的一部分,特别是在处理大量数据时,为了提高用户体验和网站性能,分页组件显得尤为重要。"超强多功能分页组件"是...
在IT行业中,分页功能是Web应用程序不可或缺的一部分,特别是在处理大量数据时,它能帮助用户高效、有序地浏览和检索信息。"公共分页功能实现"这个标题表明我们将讨论一个可复用的分页解决方案,这通常涉及到后端...
在PHP开发中,分页是常见的功能之一,用于处理大量数据的显示,使得用户能够方便地浏览和导航。本篇文章将深入探讨一个名为"page.class.php"的PHP分页类,以及如何使用它来实现高效的分页功能。 首先,我们要理解...
本篇文章将详细讲解如何利用ASPxGridView实现分组和分页功能,以帮助用户更高效地管理和浏览数据。 **一、ASPxGridView分组功能** 1. **分组表达式**: 在ASPxGridView中,可以通过添加分组表达式来实现数据的分组...
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要讲述的是 ASP.NET 中一种实现分页功能的方法。在 ASP.NET 开发中,分页是常见需求之一,尤其在处理大量数据时,合理的分页能有效提升用户体验和...
标题中的“flash+xml作品展示分类分页带简介功能”指的是一个基于Flash技术和XML数据格式的交互式内容展示系统。这个系统特别强调了它的强大功能,灵活性以及易用性,主要适用于展示设计作品或照片,为用户提供酷炫...
史上最强大的PHP分页类很可能集成了这些特性,并可能还增加了更多高级功能,比如缓存支持、多语言适配、SEO优化等。下面我们将深入探讨这些关键点: 1. **计算总页数**:分页类通过获取数据库查询结果的记录总数,...
此外,前端也需要与后端配合实现分页功能。JavaScript可以利用Ajax异步请求数据,根据返回的页码和总页数更新UI。现代前端框架如React、Vue或Angular都有成熟的分页组件库,如React的`react-paginate`,可以轻松实现...
此外,现成的分页库如jQuery DataTables、Paging.js等也能提供更丰富的功能和自定义选项。 总结起来,"Dom生成表格和实现分页源码"涉及的核心技术包括DOM操作(创建、插入和删除元素)、数据驱动视图(根据数据动态...
8. **自定义分页逻辑**:对于更复杂的需求,开发者可以编写自定义的分页逻辑,实现如分页缓存、动态调整每页条数等功能。 源码包中的文件可能包含了以上提到的一些或全部分页方法的实现,这为学习和实践ASP.NET分页...
在PHP开发中,分页是常见的功能之一,用于处理大量数据的展示,避免一次性加载过多内容导致页面响应慢或消耗过多资源。本压缩包提供的"超强php分页类"是针对这一需求的一个实用工具,它集成在一个小型的MVC框架中,...
在数据库管理中,分页是必不可少的功能,尤其是当数据集非常庞大时,一次性加载所有数据会消耗大量内存并可能导致性能下降。分页允许用户逐页查看数据,提高了用户体验并降低了服务器负载。存储过程是预编译的SQL...