博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】数据库分页Java实现
阅读量:6354 次
发布时间:2019-06-22

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

 

MySQL分页

主要是MySQL数据库内置LIMIT函数

注意添加mysql的JAR包mysql-connector-java-5.1.13-bin.jar

 select * from table LIMIT 5,10;  // 检索记录行 6-15

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

select * from content order by id desc limit 10000, 10 

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,我们可以通过2种方式:

一,子查询的分页方式来提高分页效率 

select * from 'content' where id <= 
(select id from 'content' order by id desc LIMIT ".($page-1)*$pagesize.", 1) order by id desc LIMIT $pagesize;

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。

 经过飘易的实测,使用子查询的分页方式的效率比纯LIMIT提高了14-20倍!

二,JOIN分页方式

select * from 'content' as t1 join (select id from 'content' order by id desc LIMIT ".($page-1)*$pagesize.", 1) as t2 where t1.id <= t2.id order by t1.id desc LIMIT $pagesize; 

 经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。

MySQL分页Java实现

 

<%@ page language="java" import="java.util.*,java.sql.*"    pageEncoding="gbk"%>            MySQL分页                " + "第" + i                            + "页" + "
<% //加载驱动 Class.forName("com.mysql.jdbc.Driver"); //得到连接 Connection ct = DriverManager.getConnection( "jdbc:mysql://localhost:3306/tour", "root", "root"); Statement sm = ct.createStatement(); //接收pageNow参数 String s_pageNow = request.getParameter("pageNow"); int pageNow = 1; if (s_pageNow != null) { pageNow = Integer.parseInt(s_pageNow); } //查询总页数 int pageCount = 0;//当前为第几页 int pageSize = 3;//每页显示几条记录 int rowCount = 0;//总共有多少条记录 ResultSet rs = sm.executeQuery("select count(*) from users"); if (rs.next()) { rowCount = rs.getInt(1); if (rowCount % pageSize == 0) { pageCount = rowCount / pageSize; } else { pageCount = rowCount / pageSize + 1; } } rs = sm.executeQuery("select * from users limit "+ ((pageNow - 1) * pageSize + 1) +","+pageNow* pageSize+""); while (rs.next()) { out.println("
"); out.println("
"); out.println("
"); out.println("
"); out.println("
"); } out.println("
"); //打印总页数 for (int i = 1; i < pageCount; i++) { out.println(""); } out.println("
"); rs.close(); sm.close(); ct.close(); %>
用户名 所在城市 职业
" + rs.getString(2) + " " + rs.getString(5) + " " + rs.getString(6) + "

Oracle分页

主要是3层的嵌套查询

注意添加Oracle的JAR 包classes12.jar

 经典的SQL语句(用ROWNUM实现)

select * from (select a1.*,rownum rn from (select ename,sal from emp order by sal) a1 where rownum<=10) where rn >=6;

Oracle分页java实现 

 

<%@ page language="java" import="java.util.*,java.sql.*"    pageEncoding="gbk"%>            Oracle分页                " + "第" + i                            + "页" + "
<% //加载驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //得到连接 Connection ct = DriverManager.getConnection( "jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "SCOTT", "scott"); Statement sm = ct.createStatement(); //接收pageNow参数 String s_pageNow = request.getParameter("pageNow"); int pageNow = 1; if (s_pageNow != null) { pageNow = Integer.parseInt(s_pageNow); } //查询总页数 int pageCount = 0;//当前为第几页 int pageSize = 3;//每页显示几条记录 int rowCount = 0;//总共有多少条记录 ResultSet rs = sm.executeQuery("select count(*) from emp"); if (rs.next()) { rowCount = rs.getInt(1); if (rowCount % pageSize == 0) { pageCount = rowCount / pageSize; } else { pageCount = rowCount / pageSize + 1; } } rs = sm.executeQuery("select * from (select a1.*,rownum rn from (select * from emp ) a1 where rownum<=" + pageNow * pageSize + ") where rn >=" + ((pageNow - 1) * pageSize + 1) + ""); while (rs.next()) { out.println("
"); out.println("
"); out.println("
"); out.println("
"); out.println("
"); } out.println("
"); //打印总页数 for (int i = 1; i < pageCount; i++) { out.println(""); } out.println("
"); rs.close(); sm.close(); ct.close(); %>
用户名 职业 薪水
" + rs.getString(2) + " " + rs.getString(3) + " " + rs.getString(6) + "

转载于:https://www.cnblogs.com/zzzzw/p/4869797.html

你可能感兴趣的文章
react antd-mobile 项目中实现 css 与 less 局部作用域化
查看>>
HTML5和CSS3系列(三):变化元素、新增标签、多媒体、新增表单、全局属性
查看>>
Angular练习之animations动画三
查看>>
简单而完整地体验一遍sentry的sourcemap服务
查看>>
扒取网页的mp3资源
查看>>
Git分支管理
查看>>
生孩子的问题
查看>>
一个链接能打开win10设置界面
查看>>
Redis开机启动配置
查看>>
GraphQL 入门: Apollo Client - 简介
查看>>
当编程语言掌握在企业手中,是生机还是危机?
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
Rust编程语言的核心部件
查看>>
效果逆天的通用语言模型GPT 2.0来了,它告诉了我们什么?
查看>>
eBay测试老兵的修炼之道:如何从测试“小工”到测试“专家”?
查看>>
传统运维团队转型应该注意哪些问题?
查看>>
Coinbase是如何在其加密货币交易平台上应对扩展性挑战的
查看>>
Mozilla公布WebVR API标准草案
查看>>
为什么我不会在新公司中使用Rails
查看>>
最新 Chrome DevTools(v57) 使用详解
查看>>