首页 > 数据库 >mysql、sqlserver、oracle分页,java分页统一接口实现

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

时间:2023-05-29 12:31:45浏览次数:55  
标签:java 分页 int sqlserver pageNumber sql return public String


定义:pageStart 起始页,pageEnd 终止页,pageSize页面容量

oracle分页:

rownum num from (实际传的SQL) where rownum<=pageEnd) where num>=pageStart

sqlServer分页:

           select * from ( select top 页面容量 from( select top

字段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; }
}

标签:java,分页,int,sqlserver,pageNumber,sql,return,public,String
From: https://blog.51cto.com/u_16131764/6370093

相关文章

  • java爬虫htmlunit模拟浏览器登录
    介绍刚学到了一种超实用的java爬虫技术htmlunit,先记录一下。htmlunit其实就是一个没有界面的浏览器,操作很简单,就像自己在使用浏览器。本文介绍其简单的几个操作,仅初学了解htmlunit。第一是模拟登录网站,第二是获取网页html源码。准备下载htmlunit的jar包,点击进入官网下载,下载后,里面......
  • java内存溢出监控
    在程序内增加内存溢出字符串 使用命令启动jar  -XX:+HeapDumpOnOutOfMemoryError这个命令会在报内存溢出的时候生成 .hprof文件(1)java-XX:+HeapDumpOnOutOfMemoryError-jarzxhs.jar(2)java-Xms128m-Xmx256m-XX:+HeapDumpOnOutOfMemoryError-jarzxhs.jar下......
  • java.lang.IllegalArgumentException: Invalid character found in method name [toke
    这个问题是本地用了https,只要将https改为http就可以解决。  参考:https://blog.csdn.net/weixin_44299027/article/details/109474606https://blog.csdn.net/jcmj123456/article/details/124002200......
  • 开发 Java笔记
    1.Controller@RequestMapping注解用于绑定URI到具体处理器。@RestController:Spring4新增注解,同样可以注解Controller类,相当于@Controller+@ResponseBody,主要是为了使http请求返回 json 或者xml格式数据,一般情况下都是使用这个注解。下文都基于此注解进行验证。用于将......
  • java8 stream匹配 anyMatch,allMatch,noneMatch
    anyMatch:判断的条件里,任意一个元素成功,返回trueallMatch:判断条件里的元素,所有的都是,返回truenoneMatch:与allMatch相反,判断条件里的元素,所有的都不是,返回truecount方法,跟List接口中的.size()一样,返回的都是这个集合流的元素的长度,不同的是,流是集合的一个高级工厂,中间操作是工厂里......
  • Java并发编程之ConcurrentLinkedQueue详解
    简介在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循......
  • opencv 无法使用 dll 动态链接库 UnsatisfiedLinkError java.library.path Can‘t fin
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME)使用如上方法加载本地dll文件。 一般会出现两种错误:1、UnsatisfiedLinkErrorjava.library.path  2、UnsatisfiedLinkError Can'tfinddependentlibraries 第一种错误为没有加载到指定的dll文件,该配置可以百度搜索java.li......
  • Java中Collection与Collections有什么区别?Java常见面试题解析
    本文将为大家详细讲解Java中Collection与Collections的区别点,这是我们进行开发时经常用到的知识点,也是大家在学习Java中很重要的一个知识点,更是我们在面试时有可能会问到的问题!文章较长,干货满满,建议大家收藏慢慢学习。文末有本文重点总结,主页有全系列文章分享。技术类问题,欢迎大......
  • JavaScript函数传参原理详解——值传递还是引用传递
    讨论JavaScript的传参原理之前,我们先来看一段曾经让笔者困惑了一段时间的代码vartestA=1;vartestB={};functiontestNumber(example){example=2;}functiontestObj(example){example.test=1;}testNumber(testA);testObj(testB);console.log(testA);//......
  • java多线程
    java多线程进程、线程与多线程进程是执行程序的一次执行过程,是一个动态的概念,是系统支援分配的单位通常一个进程可以包含一个或多个线程。线程是CPU调度和执行的单位线程就是独立执行的路径,由cpu调度线程会带来额外的开销,如cpu调度时间,并发控制开销每个线程在自己......