定义: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 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 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;

}

}

java sql分页_mysql、sqlserver、oracle分页,java分页统一接口实现相关推荐

  1. java.sql在哪_我的Java访问MS SQL的程序错在哪了?谢谢!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我用的开发工具是Jbuilder2006, MS SQL SERVER 2000. 源程序是: package data; import java.*; ...

  2. oracle java认证_如何通过Oracle的Java认证-开发人员实用指南

    oracle java认证 by javinpaul 由javinpaul 如何通过Oracle的Java认证-开发人员实用指南 (How to Pass Oracle's Java Certific ...

  3. java sql 返回 json_java访问oracle 返回json 实践(一)

    ------------建一个javabean 类 WorkRecord 用于保存访问数据库记录的内容 public class WorkRecord { private long do_seq; p ...

  4. html 分页_MySQL——优化嵌套查询和分页查询

    Java识堂,一个高原创,高收藏,有干货的微信公众号,欢迎关注 优化嵌套查询 嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中.嵌套查询写 ...

  5. oracle游标多线程,多线程jdbc游标分页查询原理 oracle和mysql分页

    分页查询中如何使用多线程加快处理速度? 分页sql是拼起来的现在怎么优化可以提高展示速度:优化思路: 1.试试并发多线程访问,然后把多线程获取的结果合并在一起. 2.做索引,加快查询速度. 3.把经常 ...

  6. java sql数字溢出_nested exception is java.sql.SQLException: 数字溢出的问题解决

    [进行数据库(mysql5.0)查询时出现如下异常:nested exception is java.sql.SQLException: Unknown type 246 in column 1 of ...

  7. java.sql.date格式化_如何将java.sql.date格式化为这种格式:“MM-dd-yyyy”?

    我需要以下面的格式"MM-dd-yyyy"获取 java.sql.date,但是我需要它来保留java.sql.date所以我可以将它作为日期字段放入表中.因此,格式化后它不能是S ...

  8. oracle分页数据,在Oracle中得到分页数据

    在Oracle中得到分页数据 得到DataSet的值 例子如下: /// /// 得到Colletion分页数据 /// public DataSet GetList(int PageIndex, i ...

  9. import java.sql.*;问题:The package java.sql is not accessible

    在项目中的 src 目录下面有一个文件 module-info.java,打开它,里面的内容应该是: module 项目名 {},只需要在大括号中加一句话 requires java.sql; 即可

  10. java sql 工资管理,企业工资管理系统(Java+MySQL)Word版

    <企业工资管理系统(Java+MySQL)Word版>由会员分享,可在线阅读,更多相关<企业工资管理系统(Java+MySQL)Word版(24页珍藏版)>请在人人文库网上搜索 ...

最新文章

  1. oracle设置缓存大小设置多少,【数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※】...
  2. python代码架构_Python架构
  3. JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结
  4. C语言常量类型及名称,菜鸟带你入门C语言|基本数据类型之常量
  5. 三星电视与计算机连接网络设置,三星电视怎么连接网络看电视?
  6. logrotate日志轮转策略
  7. sql server小知识
  8. web 打印插件 hiprint 使用
  9. fedora 29 使用百度网盘客户端
  10. 数据安全合规体系建设白皮书
  11. [洛谷P3987]我永远喜欢珂朵莉~
  12. linux宝塔下如何强制ssl,宝塔面板一键安装SSL证书强制HTTPS访问设置
  13. HTB-SolidState
  14. 区块链-网络安全的未来
  15. 【字典树】字典树的创建(入门详细介绍)
  16. 网站不加“www”无法访问怎么解决?
  17. kingcms常用标记
  18. 淘宝爬虫实战---requests库实现模拟登陆模块
  19. 百度地图电子围栏判断
  20. 阿里CEO张勇认为程序员不应限制年龄

热门文章

  1. Column count doesn't match value count at row 1 原因
  2. mongodb数据库的备份与恢复
  3. 如鹏网 net高级技术 第二章 委托和事件(复习)
  4. 如何使用emacs编写c语言程序,并编译运行
  5. jQuery --- grep
  6. C++没有调用析构函数
  7. Coursera机器学习笔记(一) - 监督学习vs无监督学习
  8. 剑指offer:二维数组中的查找
  9. 内核编程小结(引用)
  10. 工具使用——印象(汇总)