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){

this.dataSourceName = 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);

try {

result = qr.update(sql,param);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

public Object query(String sql,String[] param,ResultSetHandler rsh){

QueryRunner qr = new QueryRunner(ds);

Object result = null;

try {

result = qr.query(sql, param,rsh);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

public static Connection getConnection(){

Connection conn = null;

try {

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 (NamingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}

return conn;

}

}

package com.qg.demo.util;

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);

}

package com.qg.demo.util;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;

import java.util.regex.Pattern;

import org.apache.commons.dbutils.ResultSetHandler;

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.sql = sql;

this.pageSize = pageSize;

this.pageNumber = pageNumber;

init();

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) {

this.pageSize = pageSize;

}

}