针对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;
}
}