博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种数据库分页及Java实现
阅读量:4292 次
发布时间:2019-05-27

本文共 2355 字,大约阅读时间需要 7 分钟。

分页汇总

在显示记录条目时往往要用到分页,一种常用的办法是利用各种数据库自带的定位接口对原始查询语句进行改写,从而只取出特定范围的某些记录。不同的数据库,查询定位接口是不一样的,下面做一汇总:

数据库 分页查询语句 说明
MSQL “QUERY_SQL limit ?,?” 使用limit关键字,第一个”?”是起始行号, 第二个”?”是返回条目数
Oracle SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (QUERY_SQL ) A WHERE ROWNUM <= ?) WHERE RN >= ? 结合rownum关键字,利用嵌套三层select 语句实现。第一个”?”表示终止行号, 第二个”?”表示起始行号
SqlServer 尚无通用语句 可使用top n来返回前n条记录或使用存储过程
DB2 假设查询语句:select t1.* from t1 order by t1.id; 分页语句可为:”select * from ( select rownumber() over (order by t1.id) as row_,t1.* from t1 order by t1.id) as temp_ where row_ between ?+1 and ?” 返回两个”?”之间的记录
PostgreSQL “QUERY_SQL limit ? offset ?” 第一个”?”为起始行号,第二个”?”代表返回记录数

Java实现

/** * @author Jiazhi * @since 2017/4/7 */public class PageSQLUtil {
public static String DB_TYPE = "mysql";//mysql,postgrsql,oracle public static String pageSql(String sql, int pageNumber, int perPageSize) { return pageSql(sql, (long) pageNumber, (long) perPageSize); } public static String pageSql(String sql, long pageNumber, long perPageSize) { if (DB_TYPE.equals("mysql")) { return mysql(sql, pageNumber, perPageSize); } else if (DB_TYPE.equals("postgrsql")) { return postgrsql(sql, pageNumber, perPageSize); } else if (DB_TYPE.equals("oracle")) { return oracle(sql, pageNumber, perPageSize); } else { throw new RuntimeException("PageSQLUtil.DB_TYPE 错误"); } } /** * @param pageNumber 1+ * @param perPageSize 1+ */ public static String mysql(String sql, long pageNumber, long perPageSize) { long limit = (pageNumber - 1) * perPageSize; long offset = perPageSize; return sql + " LIMIT " + limit + "," + offset; } public static String postgrsql(String sql, long pageNumber, long perPageSize) { long limit = (pageNumber - 1) * perPageSize; long offset = perPageSize; return sql + " LIMIT " + limit + " OFFSET" + offset; } public static String oracle(String sql, long pageNumber, long perPageSize) { long limit = (pageNumber - 1) * perPageSize; long endRowNum = limit + perPageSize; return "SELECT * FROM " + " ( SELECT A.*, ROWNUM RN FROM " + " ( " + sql + " ) A WHERE ROWNUM " + " <= " + endRowNum + ") WHERE RN >= " + limit; }}

参考文献:

1.[JAVA]几种流行的数据库SQL分页

转载地址:http://wphgi.baihongyu.com/

你可能感兴趣的文章
玩转spring boot——负载均衡与session共享
查看>>
SpringMVC处理请求流程
查看>>
Java集合:HashMap源码剖析
查看>>
MySql 优化
查看>>
java队列——queue详细分析
查看>>
Java并发编程:线程池的使用
查看>>
SpringMVC重要注解(二)@ControllerAdvice
查看>>
Spring cloud系列十四 分布式链路监控Spring Cloud Sleuth
查看>>
Spring IOC讲解
查看>>
不错的资源
查看>>
Java ConcurrentModificationException异常原因和解决方法
查看>>
通过Nginx+tomcat+redis实现反向代理 、负载均衡及session同步
查看>>
RocketMQ实战(一)
查看>>
RocketMQ实战(二)
查看>>
RocketMQ实战(三):分布式事务
查看>>
RocketMQ实战(四)
查看>>
java.lang.OutOfMemoryError: PermGen space JVM内存参数配置
查看>>
java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一
查看>>
基本的数据类型分析----java.lang.Number类及其子类分析
查看>>
这可能是目前最全的Redis高可用技术解决方案总结
查看>>