`
a00589
  • 浏览: 2976 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

一个通用的分页类~

    博客分类:
  • jsp
阅读更多

    现在在学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()哦!继续学习中...发到博客频道实干什么的??实验下

   

1
0
分享到:
评论

相关推荐

    asp.net通用分页类

    本教程将详细讲解如何创建一个通用的分页类,以便在多个页面中复用。 首先,我们需要理解分页的基本原理。分页主要是通过限制每次从数据库中取出的数据量来实现的。比如,每一页显示10条记录,当用户点击下一页时,...

    asp.net 通用分页类

    `asp.net 通用分页类`就是为了解决这个问题而设计的,它允许开发者创建一个可复用的组件,以便在不同的数据展示页面上实现高效且灵活的分页功能。 首先,我们来看`C#`语言是如何实现分页逻辑的。在C#中,可以创建一...

    java 通用分页 java 通用分页

    在本文中,我们使用了一个名为GetRecordFromPage的存储过程,这个存储过程可以根据需要进行分页处理。 4. 存储过程GetRecordFromPage GetRecordFromPage存储过程是我们实现分页处理的核心部分。这个存储过程接受多...

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

    标题中的"一个很好的分页类php分页类"暗示我们这里有一个专门用于实现分页功能的PHP类。这个类可能包含了一系列方法,用于计算总页数、生成页码链接以及处理用户请求的特定页面。 `page.class.php`可能是这个分页类...

    Asp.net C#通用分页类

    这个类包含了实现分页所需的基本属性和方法,比如: - `Datagrid`: 用于绑定到`DataGrid`控件。 - `Datalist`: 用于绑定到`DataList`控件。 - `Repeater`: 用于绑定到`Repeater`控件。 - `Lnkprev`, `Lnknext`, `...

    超强php分页打包 通用分页 万能分页 ajax分页 google分页

    通用分页则是指设计一个可以适应多种场景的分页组件,它可能包含以下特性: 1. 参数化配置:允许用户自定义每页显示的记录数。 2. URL路由处理:支持参数传递,如通过`?page=2`来表示第2页。 3. 多种样式支持:提供...

    一个通用的数据库分页类

    这里提到的"一个通用的数据库分页类",很可能是PHP中设计的一个可复用的分页组件,用于简化数据库查询的分页逻辑。在PHP开发中,这样的类通常会包含一些核心功能,如计算总页数、获取当前页数据、设置和获取每页记录...

    php分页类(通用)

    一个通用的PHP分页类可以帮助开发者快速实现这一功能,提高用户体验。下面我们将详细探讨PHP分页类的设计原理、实现方法以及`page.class.php`这个文件可能包含的关键知识点。 1. 分页类设计基础 - **属性**:分页...

    ASP分页通用类 asp分页

    在实际使用中,你需要实例化这个类,设置分页参数,然后调用相应的函数来获取分页后的数据和分页链接。例如: ```vbscript Dim paging Set paging = New Paging paging.PageSize = 10 paging.PageIndex = 1 ' 假设...

    sql Server 通用分页存储过程

    sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程

    jquery通用分页类

    本资源提供了一个基于jQuery的通用分页类,它支持两种不同的样式,适应不同设计需求。现在,我们将详细探讨jQuery分页类的工作原理、实现方式以及如何在实际项目中应用。 首先,jQuery分页类是通过JavaScript库...

    SSH通用分页组件 SSH分页

    SSH分页 分页 通用分页 struts2分页

    通用的分页类,page 类,

    这是我以前工作的时候用的一个通用分页类,传参数调用返回list,很好用

    通用分页工具类PageInfo.java

    通用分页工具类PageInfo.java

    基于ASP的分页类 Kin_Db_Pager通用分页类.zip

    虽然Kin_Db_Pager是一个通用分页类,但开发者可以根据具体需求对其进行扩展和自定义。例如,可以增加对不同数据库系统的支持,调整分页样式,或者添加分页效果等。 总结,基于ASP的Kin_Db_Pager通用分页类是解决...

    Mybatis通用分页插件

    Mybatis通用分页插件通过自动处理分页参数,极大地简化了这一过程。 该插件的核心功能包括: 1. **智能分页**:根据不同的数据库(如MySQL、Oracle、SQL Server等)自动生成对应的分页SQL,无需手动编写LIMIT或...

    php通用分页类

    总结来说,创建一个PHP通用分页类是为了简化网页分页的实现,提高代码复用性。这个类应该能够灵活地适应不同的应用场景,处理不同数量的记录,并能生成易于理解和使用的分页链接。通过合理的参数配置和数据库操作,...

    ASP源码—分页类 Kin_Db_Pager通用分页类.zip

    总的来说,"ASP源码—分页类 Kin_Db_Pager通用分页类.zip"提供了一个完整的解决方案,帮助ASP开发者快速实现数据的分页显示,提升了开发效率,同时也优化了用户的浏览体验。通过深入理解和运用这个类,开发者可以在...

    ASP通用分页类程序

    ASP 通用分页类 非常好用!!!

    hibernate通用分页

    因此,创建一个通用的分页辅助类(如`Pagehelp.java`和`Page(hibernate通用分页).java`)是非常必要的。 `Pagehelp.java`可能包含一个静态方法,接受Hibernate的Session对象、查询条件、每页大小和当前页数作为参数...

Global site tag (gtag.js) - Google Analytics