`
aijuans
  • 浏览: 1568059 次
社区版块
存档分类
最新评论

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;

 }
}

分享到:
评论

相关推荐

    sql 分页 oracle mysql sqlserver

    sql 分页 针对oracle mysql sqlserver 等数据库的通用类

    mysql分页,oracle分页,sql server三种数据库实现分页

    mysql,oracle,sql server分页总结与比较

    sql分页(sqlserver,mysql,oracle )

    不同的数据库系统,如SQL Server、MySQL、Oracle,由于其设计原理和语法的不同,在实现分页功能上也有所差异。下面将详细介绍这三种数据库系统的分页方法。 ### SQL Server 分页 SQL Server 中实现分页主要通过`...

    Oracle Sql语句转换成Mysql Sql语句

    OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...

    oracle mysql sqlserver分页

    本文将详细介绍Oracle、MySQL以及SQL Server三种主流数据库系统中的分页技术,包括它们各自的实现方法和一些实用技巧。 ### 一、Oracle 分页 Oracle数据库提供了强大的功能来支持分页查询。在Oracle中,主要使用`...

    oracle mysql SQL server分页

    本文将详细介绍Oracle、MySQL以及SQL Server这三种常用数据库管理系统中的分页查询实现方法。 #### 一、Oracle 分页查询 在Oracle中实现分页查询主要依靠`ROWNUM`伪列,这是一种非常简单但功能强大的机制。下面将...

    mysql,oracle,sqlserver分页

    ### 数据库分页技术详解:MySQL、Oracle与SQL Server #### Oracle 分页 在Oracle数据库中实现分页功能,主要依赖于`ROWNUM`伪列。`ROWNUM`用于为查询结果集中的每一行分配一个唯一的编号,从1开始递增。通过控制`...

    sqlserver,mysql,oracle三种数据库的分页查询

    本文将深入探讨SQL Server、MySQL和Oracle这三种主流数据库系统中的分页查询实现方式。 首先,我们来看SQL Server。SQL Server提供了一种称为"TOP"的关键字来实现分页。例如,如果我们想获取第1页(假设每页有10条...

    Oracle,mysql,sqlserver等各种数据库的分页方法

    ### Oracle分页方法 Oracle数据库提供了`ROWNUM`伪列来进行分页查询,但在使用时需要注意一些细节。 #### 3. 使用`ROWNUM`伪列 - **获取指定范围的数据**(例如第2至第3条记录): ```sql SELECT ID FROM ( ...

    用于oracle,mysql,sqlserver,数据库分页联合查询

    本话题主要聚焦于如何在Oracle、MySQL和SQL Server这三种主流关系型数据库中实现分页联合查询。 首先,我们来看Oracle数据库的分页查询。Oracle使用ROWNUM关键字来实现分页。例如,如果我们想获取第10到20条记录,...

    Oracle,SQl,MySql实现分页查询

    本文将基于提供的文件信息,深入探讨三种不同的分页查询方法及其在Oracle、SQL Server(这里用SQL代替)、MySQL中的实现方式,并对它们的性能进行对比分析。 #### 分页方案一:利用Not In和SELECT TOP分页 **基本...

    关于SQL Server SQL语句查询分页数据的解决方案

    针对这一需求,本文将详细介绍如何在SQL Server中实现有效的分页查询。 ### 方法1:使用NOT IN 这种方法通过先选择前300100条记录的序列号(这里假设`fldserialNo`是唯一标识每一行的字段),然后在外层查询中排除...

    oracle mysql sql server 等数据库的分页要点解析

    分页技术在Oracle、MySQL和SQL Server等主流数据库系统中都有其独特的实现方式。 **为什么需要分页** 1. **方便用户查看**:在网页或应用程序中,如果一次性加载所有数据,用户可能会被海量信息淹没,分页则可以将...

    Oracle中实现MySql中limit+SqlServer分页+分页的存储过程

    本篇文章将探讨如何在Oracle数据库中实现类似MySQL的`LIMIT`分页功能,以及如何模拟SQL Server的分页方式,并介绍`INTERSECT`和`MINUS`这两个SQL运算符。 首先,`INTERSECT`运算符用于找出两个或多个查询结果中的...

    mySql与oracle分页技术

    Oracle 12c引入了`FETCH NEXT`和`OFFSET`,这使得Oracle的分页语法与MySQL和SQL Server等其他数据库系统更加兼容: ```sql SELECT * FROM your_table OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; ``` 这种方法避免了...

    统一实现分页接口

    本文详细介绍了在Oracle、SQL Server、MySQL三种主流数据库上实现分页的方法,并通过Java实现了统一的分页接口。这种跨数据库平台的分页技术,不仅可以提高应用程序的可移植性和可维护性,还能有效提升用户界面的...

    Sqlserver、Oracle、MySql、PostgreSql、SqlLite数据库差异

    - **Sqlserver**、**Oracle**、**MySql**、**PostgreSql** 和 **SqlLite** 都提供了丰富的内置函数支持,包括数学、日期时间、字符串处理等多方面功能。 #### 五、分页 分页是数据库中常见的需求之一,不同的...

    java实现的一个分页程序

    2. **SQL分页查询**:在SQL中,不同的数据库管理系统(如MySQL, Oracle, SQL Server)有不同的语法来实现分页。例如,MySQL使用`LIMIT`和`OFFSET`,而Oracle可能使用`ROWNUM`。 3. **Page对象**:为了更好地封装...

    数据库分页大全,oracle,sqlserver,mysql

    以上介绍了Oracle、SQL Server和MySQL这三种主流数据库中实现分页的不同方法。虽然这些数据库之间的语法存在差异,但其核心思想都是通过限制返回结果的数量来实现分页效果。在实际应用中,开发人员应根据具体情况...

Global site tag (gtag.js) - Google Analytics