mysql、sqlserver、oracle分页,java分页统一接口实现

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:
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; 


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
155 1
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
391 0
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
232 13
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
7月前
|
人工智能 Java 关系型数据库
Java的时间处理与Mysql的时间查询
本文总结了Java中时间与日历的常用操作,包括时间的转换、格式化、日期加减及比较,并介绍了MySQL中按天、周、月、季度和年进行时间范围查询的方法,适用于日常开发中的时间处理需求。
136 0
|
9月前
|
SQL Java 数据库连接
Java中实现SQL分页的方法
无论何种情况,选择适合自己的,理解了背后的工作原理,并能根据实际需求灵活变通的方式才是最重要的。
249 9
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
465 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
859 26
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
249 9

热门文章

最新文章

推荐镜像

更多