mysql、sqlserver、oracle分頁,java分頁統一接口實作
定義:pagestart 起始頁,pageend 終止頁,pagesize頁面容量
oracle分頁:
select * from ( select mytable.*,rownum num from (實際傳的sql) where rownum<=pageend) where num>=pagestart
sqlserver分頁:
select * from ( select top 頁面容量 from( select top 頁面容量*目前頁碼 * from 表 where 條件 order by 字段a) as temptable1 order by
字段a desc) as temptable2 order by 字段a
mysql分頁:
select * from mytable where 條件 limit 目前頁碼*頁面容量-1 to 頁面容量
java分頁接口和實作類:
package com.qg.demo.util;
import java.sql.connection;
import java.sql.sqlexception;
import javax.naming.context;
import javax.naming.initialcontext;
import javax.naming.namingexception;
import javax.sql.datasource;
import org.apache.commons.dbutils.queryrunner;
import org.apache.commons.dbutils.resultsethandler;
public class oracleutil {
private string datasourcename;
private datasource ds;
public oracleutil(string datasourcename){
this.datasourcename = datasourcename;
}
public oracleutil(){
public void setdatasourcename(string datasourcename){
public void init(){
context initcontext;
try {
initcontext = new initialcontext();
ds = (datasource)initcontext.lookup(datasourcename);
} catch (namingexception e) {
e.printstacktrace();
}
public int update(string sql,string[] param){
int result = 0;
queryrunner qr = new queryrunner(ds);
result = qr.update(sql,param);
} catch (sqlexception e) {
// todo auto-generated catch block
return result;
public object query(string sql,string[] param,resultsethandler rsh){
object result = null;
result = qr.query(sql, param,rsh);
public static connection getconnection(){
connection conn = null;
context context = new initialcontext();
datasource ds = (datasource)context.lookup("java:/comp/env/jdbc/oracleds");
conn = ds.getconnection();
queryrunner qr = new queryrunner(ds);
// preparedstatement pstmt = conn.preparestatement("select * from guestbook");
// resultset rs = pstmt.executequery();
// while(rs.next()){
// system.out.println(rs.getint("g_id"));
// system.out.println(rs.getstring("title"));
// system.out.println(rs.getstring("remark"));
// }
}catch(sqlexception e){
return conn;
import java.util.list;
public interface pagination {
public boolean islast();
public boolean isfirst();
public boolean hasnext();
public boolean hasprevious();
public int getmaxelements();//最大記錄數
public int getmaxpage();//最大頁碼
public int getnext();
public int getprevious();
public int getpagesize();
public int getpagenumber();
public list<object> getlist();
public void setpagesize(int pagesize);
public void setpagenumber(int pagenumber);
import java.sql.resultset;
import java.util.regex.pattern;
import org.apache.commons.dbutils.handlers.maplisthandler;
public class oraclepaginationimpl implements pagination {
private int pagesize = 20;
private int pagenumber = 1;
private int maxelements;
private int maxpage;
private string sql;
private oracleutil db;
public oraclepaginationimpl(string sql){
this.sql = sql;
init();
public oraclepaginationimpl(string sql,int pagesize, int pagenumber){
this.pagesize = pagesize;
this.pagenumber = pagenumber;
setpagenumber(pagenumber);
private void init(){
db = new oracleutil("java:/comp/env/jdbc/oracleds");
db.init();
setmaxelements();
setmaxpage();
private void setmaxelements() {
//select * from xxx order by xx desc
//select count(1) from xxx order by xx desc
string regex = "select((.)+)from";
pattern p = pattern.compile(regex,pattern.case_insensitive);
string[] s = p.split(this.sql);
string newsql = "select count(1) as total from "+s[1];
resultsethandler handler = new resultsethandler(){
public object handle(resultset rs) throws sqlexception{
if(rs.next()){
return new integer(rs.getint("total"));
}else{
return null;
}
}
};
this.maxelements = (integer)db.query(newsql, null, handler);
private void setmaxpage(){
this.maxpage = (maxelements%pagesize == 0 ? maxelements/pagesize : (maxelements/pagesize +1));
private string sqlmodify(string sql,int begin ,int end){
stringbuffer buffer = new stringbuffer();
buffer.append("select * from ( select rownum num,a.* from (")
.append(sql)
.append(") a where rownum <= ")
.append(end)
.append(") where num >= ")
.append(begin);
return buffer.tostring();
private int getbeginelement() {
return (pagenumber-1) * pagesize +1;
private int getendelement() {
return (pagenumber*pagesize >=maxelements ? maxelements : pagenumber*pagenumber);
public list<object> getlist() {
string newsql = this.sqlmodify(sql, getbeginelement(), getendelement());
return (list)db.query(sql, null, new maplisthandler());
public int getmaxelements() {
return maxelements;
public int getmaxpage() {
return maxpage;
public int getnext() {
return pagenumber+1 >= maxpage ? maxpage : pagenumber+1;
public int getpagenumber() {
return pagenumber;
public int getpagesize() {
return pagesize;
public int getprevious() {
return pagenumber-1 <=1 ? 1 :pagenumber -1;
public boolean hasnext() {
return pagenumber < maxpage;
public boolean hasprevious() {
return pagenumber > 1;
public boolean isfirst() {
return pagenumber == 1;
public boolean islast() {
return pagenumber == maxpage;
public void setpagenumber(int pagenumber) {
if(pagenumber>maxpage){
this.pagenumber = maxpage;
}else if(pagenumber<1){
this.pagenumber = 1;
}else{
this.pagenumber = pagenumber;
public void setpagesize(int pagesize) {