现在在学jsp,想到怎么去分页。在网上瞄了些分页的方法,貌似有几种。我刚刚开始想的把所有的记录全部放倒一个list里,最后分页拿出记录。虽然能行,但感觉这样做有点不对劲,数据要是很多的话那要多长的list啊~~还有种想法,每次取记录直接在数据库里去一页数据,但各个数据库又不同,不可能为每个数据库写个吧(学校上的数据库太没水准了,教的sql server2000,top 都没仔细讲~~。就是因为sqlserver2000做课程设计还害我电脑中毒了,怨念···)。想了半天,想不出一个不依赖数据库种类的方法,毕竟对java.sql包里的东西还不熟悉。
后来上网看到一种通用方法,这种方法是在存有数据的ResultSet中,通过里面的方法模拟分页,每次从中取出当前页的数据。把这种方法封装到一个类中,就可以像操作ResultSet一样了。虽然效率上相对来说不很高,但是考虑到重用性和和效率,这应该是一个比较折中的办法吧。当然了,我觉得具体应用还是根据实际情况再做选取。
既然是学习,仅仅是理解是不行的,要付诸实现才能变成自己的,自己按照这种方法也试着写了一个这样的类,也许细节上不很严谨,毕竟是属于个没经验的学生···,但是分页功能还是实现了。
先定义了个接口Pageable
public interface Pageable {
public boolean gotoPage(int curPage) throws SQLException;
public boolean beforeFirst() throws SQLException;
public boolean first() throws SQLException;
public boolean next() throws SQLException;
public boolean isAfterLast();
public int getTotalPage();
public int getTotal();
public int getCurPage();
public int getPageNum();
}
再通过Pagination实现:
import java.sql.ResultSet;
import java.sql.SQLException;
public class Pagination implements Pageable {
protected ResultSet rs = null;
protected int total; //总记录数
protected int pageNum; //每页显示的页数
protected int curPage; //当前第几页
protected int row; //当前页第一条记录
protected int rowFlag; //当前页偏移量
protected int totalPage;//总页数
/*
* 只使用ResultSet的功能,用此构造方法,再用getResultSet()可获得当前ResultSet
*/
public Pagination(ResultSet rs) throws SQLException{
this.rs = rs;
}
/*
* 分页用此构造方法
*/
public Pagination(ResultSet rs,int pageNum) throws SQLException{
this(rs);
rs.last();
this.total = rs.getRow();
this.pageNum = pageNum;
if(this.pageNum <= 0){
throw new SQLException("每页最大行数无效 :" + this.pageNum);
}
if(total % pageNum == 0){
this.totalPage = total / pageNum;
}else{
this.totalPage = total / pageNum + 1;
}
}
/*
* 跳到第curPage页
*/
public boolean gotoPage(int curPage) throws SQLException{
this.curPage = curPage;
if(this.curPage > this.totalPage){
throw new SQLException("无效页" + this.curPage);
}
this.row = (curPage - 1) * this.pageNum + 1;
return rs.absolute(row);
}
/*
* 将光标移到当前页第一条记录前
*/
public boolean beforeFirst() throws SQLException{
this.rowFlag = -1;
return this.rs.absolute(this.row - 1);
}
/*
* 将光标移到当前页第一条记录
*/
public boolean first() throws SQLException{
this.rowFlag = 0;
return this.rs.absolute(this.row);
}
/*
* 将光标向后移一位
*/
public boolean next() throws SQLException{
// //如果偏移量比每页最大页数多,证明到最后一条记录后,不继续向后next
// if(this.rowFlag > this.pageNum - 1){
// return false;
// }
// //当最后一页记录条数少于每页最多页数,计算出最后页最多记录条数,不继续向后next
// if(total % pageNum != 0 && this.curPage == this.totalPage){
// if(this.rowFlag > this.total % this.pageNum - 1){
// return false;
// }
// }
this.rowFlag++;
return rs.next();
}
/*
* 判断光标是否移到最后条记录后
*/
public boolean isAfterLast(){
//如果偏移量比每页最大页数多,证明到最后一条记录后
if(this.rowFlag > this.pageNum - 1){
return true;
}
//当最后一页记录条数少于每页最多页数,计算出最后页最多记录条数
if(total % pageNum != 0 && this.curPage == this.totalPage){
if(this.rowFlag > this.total % this.pageNum - 1){
return true;
}
}
return false;
}
/*
* getter ...
*/
public ResultSet getResultSet(){
return rs;
}
public int getTotalPage(){
return this.totalPage;
}
public int getTotal(){
return this.total;
}
public int getCurPage(){
return this.curPage;
}
public int getPageNum(){
return this.pageNum;
}
}
用完ResultSet记得close()哦!继续学习中...发到博客频道实干什么的??实验下
分享到:
相关推荐
本教程将详细讲解如何创建一个通用的分页类,以便在多个页面中复用。 首先,我们需要理解分页的基本原理。分页主要是通过限制每次从数据库中取出的数据量来实现的。比如,每一页显示10条记录,当用户点击下一页时,...
`asp.net 通用分页类`就是为了解决这个问题而设计的,它允许开发者创建一个可复用的组件,以便在不同的数据展示页面上实现高效且灵活的分页功能。 首先,我们来看`C#`语言是如何实现分页逻辑的。在C#中,可以创建一...
在本文中,我们使用了一个名为GetRecordFromPage的存储过程,这个存储过程可以根据需要进行分页处理。 4. 存储过程GetRecordFromPage GetRecordFromPage存储过程是我们实现分页处理的核心部分。这个存储过程接受多...
标题中的"一个很好的分页类php分页类"暗示我们这里有一个专门用于实现分页功能的PHP类。这个类可能包含了一系列方法,用于计算总页数、生成页码链接以及处理用户请求的特定页面。 `page.class.php`可能是这个分页类...
这个类包含了实现分页所需的基本属性和方法,比如: - `Datagrid`: 用于绑定到`DataGrid`控件。 - `Datalist`: 用于绑定到`DataList`控件。 - `Repeater`: 用于绑定到`Repeater`控件。 - `Lnkprev`, `Lnknext`, `...
通用分页则是指设计一个可以适应多种场景的分页组件,它可能包含以下特性: 1. 参数化配置:允许用户自定义每页显示的记录数。 2. URL路由处理:支持参数传递,如通过`?page=2`来表示第2页。 3. 多种样式支持:提供...
这里提到的"一个通用的数据库分页类",很可能是PHP中设计的一个可复用的分页组件,用于简化数据库查询的分页逻辑。在PHP开发中,这样的类通常会包含一些核心功能,如计算总页数、获取当前页数据、设置和获取每页记录...
一个通用的PHP分页类可以帮助开发者快速实现这一功能,提高用户体验。下面我们将详细探讨PHP分页类的设计原理、实现方法以及`page.class.php`这个文件可能包含的关键知识点。 1. 分页类设计基础 - **属性**:分页...
在实际使用中,你需要实例化这个类,设置分页参数,然后调用相应的函数来获取分页后的数据和分页链接。例如: ```vbscript Dim paging Set paging = New Paging paging.PageSize = 10 paging.PageIndex = 1 ' 假设...
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
本资源提供了一个基于jQuery的通用分页类,它支持两种不同的样式,适应不同设计需求。现在,我们将详细探讨jQuery分页类的工作原理、实现方式以及如何在实际项目中应用。 首先,jQuery分页类是通过JavaScript库...
SSH分页 分页 通用分页 struts2分页
这是我以前工作的时候用的一个通用分页类,传参数调用返回list,很好用
通用分页工具类PageInfo.java
虽然Kin_Db_Pager是一个通用分页类,但开发者可以根据具体需求对其进行扩展和自定义。例如,可以增加对不同数据库系统的支持,调整分页样式,或者添加分页效果等。 总结,基于ASP的Kin_Db_Pager通用分页类是解决...
Mybatis通用分页插件通过自动处理分页参数,极大地简化了这一过程。 该插件的核心功能包括: 1. **智能分页**:根据不同的数据库(如MySQL、Oracle、SQL Server等)自动生成对应的分页SQL,无需手动编写LIMIT或...
总结来说,创建一个PHP通用分页类是为了简化网页分页的实现,提高代码复用性。这个类应该能够灵活地适应不同的应用场景,处理不同数量的记录,并能生成易于理解和使用的分页链接。通过合理的参数配置和数据库操作,...
总的来说,"ASP源码—分页类 Kin_Db_Pager通用分页类.zip"提供了一个完整的解决方案,帮助ASP开发者快速实现数据的分页显示,提升了开发效率,同时也优化了用户的浏览体验。通过深入理解和运用这个类,开发者可以在...
ASP 通用分页类 非常好用!!!
因此,创建一个通用的分页辅助类(如`Pagehelp.java`和`Page(hibernate通用分页).java`)是非常必要的。 `Pagehelp.java`可能包含一个静态方法,接受Hibernate的Session对象、查询条件、每页大小和当前页数作为参数...