分页组件

针对jdbc写得通用 分页组件,保存以便重用

/**
 * 通用分页组件,能满足一般的需求
 * @author ypqiao
 *
 */
public class PagingComp {
	
	
	public static final int PAGE_ROWSCOUNT = 5; //默认每页记录条数
	public static final int PAGES = 1;			//默认总页数
	public static final int PAGE = 1;			//默认查询页数
	public static final int ALL_COUNT = 0;		//默认总记录数数
		
	public static final int ORACLE = 0;			//oracle数据库标识
	public static final int DB2 = 1;			//db2数据库标识
	public static final int MYSQL = 2;			//mysql数据库标识
	public static final int SYSBASE = 3;		//sysbase数据标识
	public static final int MS_SERVER = 4;		//ms_server数据库标识
	
	
	private int page = PAGE;					//查询页数
	private int pages = PAGES;					//记录总页数
	private int pageCount = PAGE_ROWSCOUNT; 	//每页记录数
	private int allCount = ALL_COUNT;			//总记录数
	
	private boolean hidden_firstpage = false;	//首页页超链接
	private boolean hidden_lastpage = false;	//上页超链接是否可用
	private boolean hidden_nextpage = false;	//下页超链接是否可用
	private boolean hidden_endpage = false;		//末页超链接是否可用
	
	
	
	public PagingComp(){}
	
	public PagingComp( int page, int pages,int pageCount,int allCount ){
		this.page = page;
		this.pages = pages;
		this.pageCount = pageCount;
		this.allCount = allCount;
		if( page == 1){
			this.hidden_lastpage = true;
			this.hidden_firstpage = true;
		}
		
		if( page == pages ){
			this.hidden_nextpage = true;
			this.hidden_endpage = true;
		}
	}
	
	/**
	 * Description : 根据给定的数据库类型,返回相应的分页查询sql语句
	 * @param sql 能查出总记录的sql
	 * @param start 起始位置
	 * @param pageCount 查询条数
	 * @param databaseType 数据库类型
	 * @return
	 */
	public static String getPageSQL( String sql ,int start ,int pageCount,int databaseType){
		if( databaseType == ORACLE ){
			return getOraclePageSql(sql,start,pageCount);
		} else if( databaseType == DB2 ){
			return getDb2PageSql(sql,start,pageCount);
		} else if( databaseType == MYSQL ){
			return getMysqlPageSql(sql,start,pageCount);
		} else if( databaseType == SYSBASE ){
			return getSysbasePageSql(sql,start,pageCount);
		} else if( databaseType == MS_SERVER ){
			return getMs_ServerPageSql(sql,start,pageCount);
		}else {
			throw new RuntimeException(" the invalid database type ");
		}
		
	}
	
	
	private static String getMs_ServerPageSql(String sql, int start,
			int pageCount) {
		StringBuilder sb = new StringBuilder();
		
		sb.append(" select top ").append(pageCount).append(" * from ( ");
		sb.append(sql);
		sb.append(" ) ").append(" where id not in ( ");
		sb.append(" select top ").append(start).append(" id  from ( ");
		sb.append(sql);
		sb.append(" ) ) ");
		
		return sb.toString();
	}

	private static String getSysbasePageSql(String sql, int start, int pageCount) {
		// 待定
		return null;
	}


	private static String getMysqlPageSql(String sql, int start, int pageCount) {
		return sql+" limit "+start+" , "+pageCount;
	}


	private static String getDb2PageSql(String sql, int start, int pageCount) {
		// TODO Auto-generated method stub
		return null;
	}


	private static String getOraclePageSql(String sql ,int start ,int pageCount){
		StringBuilder sb = new StringBuilder();
		sb.append(" select * from ( select row_.*, rownum rownum_ from ( ");
		sb.append(sql);
		sb.append(" ) row_ where rownum <= "+(start+pageCount)+" ) where rownum_ > "+start);
		return sb.toString();
	}
	
	
	/**根据提供的页数和每页条数计算出起始记录**/
	public static int getStart( int page,int pageCount ){
		return ( page-1)*pageCount;
	}
	
	/***根据传入的记录总数和每页条数,计算出记录的总页数*/
	public static int getPages( int rows ,int pageCount ){
		int number = rows/pageCount;
		int yushu = rows%pageCount;
		if( yushu >0 )
			return number+1;
		return number;
	}


	public int getPage() {
		return page;
	}


	public void setPage(int page) {
		this.page = page;
	}


	public int getPages() {
		return pages;
	}


	public void setPages(int pages) {
		this.pages = pages;
	}


	public int getPageCount() {
		return pageCount;
	}


	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}


	public int getAllCount() {
		return allCount;
	}


	public void setAllCount(int allCount) {
		this.allCount = allCount;
	}


	public boolean isHidden_firstpage() {
		return hidden_firstpage;
	}


	public void setHidden_firstpage(boolean hidden_firstpage) {
		this.hidden_firstpage = hidden_firstpage;
	}


	public boolean isHidden_lastpage() {
		return hidden_lastpage;
	}


	public void setHidden_lastpage(boolean hidden_lastpage) {
		this.hidden_lastpage = hidden_lastpage;
	}


	public boolean isHidden_nextpage() {
		return hidden_nextpage;
	}


	public void setHidden_nextpage(boolean hidden_nextpage) {
		this.hidden_nextpage = hidden_nextpage;
	}


	public boolean isHidden_endpage() {
		return hidden_endpage;
	}


	public void setHidden_endpage(boolean hidden_endpage) {
		this.hidden_endpage = hidden_endpage;
	}
	
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值