java sql分页_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 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;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓四大组件总览

在安卓中四大组件 &#xff08;Component&#xff09;指的是&#xff1a;Activity&#xff0c;Service&#xff0c;BroadcastReceiver&#xff0c;ContentProvider。此博客仅仅对安卓中四大组件从整体上进行简单的分析&#xff0c;了解他们在安卓系统框架中处的位置与作用&…

华为软件研发面试题2

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** from&#xff1a;http://blog.csdn.net/eddy_0825/article/details/1875582 C语言面试…

Spring学习(24)--- AOP之 Aspect instantiation models(aspect实例模式)特别说明

重要&#xff1a; schema-defined aspects只支持singleton model&#xff0c;即 基于配置文件的aspects只支持单例模式 转载于:https://www.cnblogs.com/JsonShare/p/4638475.html

unix网络编程 str_cli epoll 非阻塞版本

unix网络编程 str_cli epoll 非阻塞版本 unix网络编程str_cli使用epoll实现讲了使用epoll配合阻塞io来实现str_cli,这个版本是配合非阻塞io. 可以看到采用非阻塞io以后复杂度大大提升了. 这个版本是在原书select版本基础之上修改而来,可以看出epoll又比select版本复杂了很多,每…

java ee 指南 pdf_Java EE 7权威指南:卷1(原书第5版) 中文pdf

资源名称&#xff1a;Java EE 7权威指南&#xff1a;卷1(原书第5版) 中文pdf第一部分 引言第1章 概述 2第2章 使用教程示例 27第二部分 平台基础知识第3章 资源创建 38第4章 注入 41第5章 打包 44第三部分 Web层第6章 Web应用入门 50第7章 JSF技术 66第8章 Facelets…

中兴面试题2

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** from&#xff1a;http://blog.csdn.net/eddy_0825/article/details/1875566 现在的公司…

java 路径获取文件名称_java 根据文件获取文件名及路径的方法

filelistnew HashMap();/*** 递归方法* param path 文件路径*/public static void find(String path){File filenew File(path);File[] files file.listFiles();//如果文件数组为null则返回if (files null)return;for (int i 0; i < files.length; i) {if (files[i].isDi…

PYTHON招聘需求与技能体系

为什么80%的码农都做不了架构师&#xff1f;>>> 目前国内的招聘Python&#xff0c;基本都是偏向web后台开发&#xff0c;偶有高大上的数据挖掘&机器学习 这是之前(2012年)找工作整理的一些JD&#xff0c;在梳理几年来的笔记&#xff0c;顺带理一理 可以以此建…

C#学习笔记(十一):动态类型

C#是一门静态类型的语言&#xff0c;但是在C#4.0时微软引入了动态类型的概念。 dynamic 关键字dynamic用来定义动态对象&#xff0c;我们来看一下动态类型的一些特性。 调用不同类的相同方法 我们有两个或多个不相关的类&#xff0c;然后运行时需要可以调用到相同名称的方法&am…

c++面试试题

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** from&#xff1a;http://blog.csdn.net/eddy_0825/article/details/1875597 1 …

《FPGA全程进阶---实战演练》第二十一章 电源常用类型:LDO和 DCDC

高速电路中的电源设计 高速电路中的电源设计大概分为两种&#xff0c;一种是集总式架构&#xff0c;一种是分布式架构。集总式架构就是由一个电源输入&#xff0c;然后生成多种所需要的电压。如图1所示。这种架构会增加多个DC/DC模块&#xff0c;这样成本不可控&#xff0c;PCB…

自定义View控件(2—手写实例代码)

1、 步骤: 1.自定义一个类继承于UIView 2.在initWithFrame方法中添加子控件 3.在layoutSubviews中设置子控件的位置 4.提供一个属性保存外界传入的数据(模型对象), 重写setter方法设置子控件的数据 - 类工厂方法(便利构造器) 按照苹果的风格和规范, 一般情况一个用于创建对…

pojo java_Java——POJO总结

一&#xff1a;什么是POJO“Plain Old Java Object”“简单java对象”。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口&#xff0c;更没有被其它框架侵入的java对象。二&#xff1a;为什么会有POJO&#xff1f;主要是Java的开发者被EJB的繁杂搞怕了&#xff0c;…

MATLAB调用C/C++函数的方法

http://item.taobao.com/item.htm?spma1z10.5-c.w4002-9510581626.24.ZO6sko&id43401674106 精通MATLAB混合编程视频讲解 MATLAB各类函数视频讲解 基于MATLAB的高等数学问题求解 MATLAB函数速查视频讲解 面向对象C视频教程 精通MATLAB混编编程demo及PDF QQ&#xff1a…

迁云架构实践

本文着笔介绍IT互联网化为传统企业带来的技术挑战&#xff0c;并对上云架构最佳实践进行了深入介绍&#xff0c;首发于阿里云&《程序员》联合出品的《凌云》杂志。 作者&#xff1a; 王宇德&#xff0c;张文生 云计算作为信息技术领域的一种创新应用模式&#xff0c;自其诞…

最短路最新心得

如果&#xff0c;上面的图&#xff0c;如果用dij算法&#xff0c;那么dist[4] 4, 是得不到正确的结果的&#xff0c; 这个因为dist[3]先被确定是最小&#xff0c;然后用来更新dist[4] 但是存在负权&#xff0c;使得dist[3]更小&#xff0c;但是我们已经把结点3标记为不可用了…

java canvas 缩放图片_java-GWT:放大和缩小画布绘图

我想应用放大和缩小,并在画布上重新绘制对象,以便在最大和最小缩放级别都能获得清晰的视图.我获得了如何执行操作的参考here,因此我已将画布传递给可缩放图像构造函数而不是图像,并按照所有步骤进行操作.我再次在“ mainDraw”方法中重画对象,但没有得到正确的结果.我知道我缺少…

MATLAB中MEX文件的编写与调试

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com http://item.taobao.com/item.htm?spma1z10.5-c.w4002-9510581626.24.ZO6sko&id43401674106 精通MATLAB混合编程视频讲解 MATLAB各类函数…

数据库设计思考

一&#xff1a;没有完美的数据库设计&#xff0c;只有符合业务的数据库设计&#xff01; 二&#xff1a;我们的数据库设计&#xff0c;在遵守标准&#xff08;三大范式&#xff09;的同时也要考虑客户的体验&#xff01; 有用户才有天下&#xff01; 三&#xff1a;数据库设计时…

performSegueWithIdentifier:sender里边的sender是啥意思

performSegueWithIdentifier:sender里边的sender是啥意思啊&#xff1f;怎样用啊&#xff1f; [self performSegueWithIdentifier:"pushSign" sender:self]; [self performSegueWithIdentifier:"pushSign" sender:sender]; [self performSegueWithIdent…