码迷,mamicode.com
首页 > 数据库 > 详细

[数据库]Oracle和mysql中的分页总结

时间:2014-10-14 21:19:59      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   ar   java   strong   sp   

物理分页
•在sql查询时,从数据库只检索分页需要的数据
•通常不同的数据库有着不同的物理分页语句
•mysql物理分页,采用limit关键字
•例如:检索11-20条 select * from user limit 10,10 ;

 

* 每次只查询10条记录.当点击下一页的时候,查询数据库,查询后10条.

* 优点:如果数据量非常大,不会导致内存溢出.

* 缺点:每次都与数据库进行交互.

* 分页一般采用数据库的sql语句完成分页查询.

* MYSQL分页:使用limit关键字.

* Oracle分页:使用rownum    SQLServer分页:使用top关键字.

* select * from customer limit a,b;

* 参数a:代表从那条记录开始,初始值是0.

* 参数b:查询长度.

 

* 分页关系:

page(当前页数)            limit(每页显示条数)           start(从哪开始的)

1                        10                          0

2                        10                          10

3                        10                          20

 

***** start = (page - 1) * limit;

 

* 向后台传递值:当前页数.

* 后台向页面显示数据:currPage(当前页数)、List<Customer>、totalPage(总页数.需要通过总记录数进行计算.)、totalCount(总记录数)、limit(每页显示的记录数).

* 将这些参数进行封装.封装到一个JavaBean中. 用request域存取JavaBean.

 

Oracle中的分页:

Oracle中分页用rownum;

rownum的特点是:

1. rownum永远按照默认的顺序生成

2. rownum只能使用< <=; 不能使用> >=

(关于rownum的特点我在上一个博文中解释第一题已经说了一些:忘记请点击)

SQL> --分页
SQL> select rownum,empno,ename,sal
  2  from emp
  3  where rownum>=5 and rownum<=8;

未选定行

SQL> select rownum,empno,ename,sal
  2  from emp
  3  where rownum>=5;

未选定行

解决方法是:

--oracle分页
SQL>  select *
  2   from      (select rownum r,e1.*
  3      from (select * from emp order by sal) e1
  4      where rownum <=8
  5     )
  6   where r >=5;

         R      EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
         5       7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30
         6       7934 MILLER     CLERK           7782 23-1月 -82           1300                    10
         7       7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30
         8       7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300         30

详细的分析过程因为博客园 编辑器不够强大,我用word解释了,这里附截图和部分SQL文:

这个是从第二个select开始的sql语句:
SQL> select rownum r,e1.* 2 from (select * from emp order by sal) e1 3 where rownum <=8 4 ; R EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 1 7369 SMITH CLERK 7902 17-12月-80 800 20 2 7900 JAMES CLERK 7698 03-12月-81 950 30 3 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 4 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 5 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 6 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 8 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 已选择 8 行。

bubuko.com,布布扣

 

逻辑分页

•在sql查询时,先从数据库检索出所有数据的结果集
•在程序内,通过逻辑语句获得分页需要的的数据
•例如: 检索11-20条 userList.subList(10,20);
 

* 一次性将数据库中所有记录都查询出来,存放到List集合中,每次查询的时候,List集合subList.截取List集合的长度,完成分页.

* 优点:只访问一次数据库.

* 缺点:如果数据量非常大,容易导致内存溢出.

 

在java中传递封装分页相关信息的时候的JavaBean的设计

/**
 * 分页查询 数据类 存放分页相关所有数据
 */
public class PageBean {
    private int pageNum; // 当前页码
    private int numPerPage; // 每页记录条数
    private int totalCount; // 总记录条数
    private int totalPageNum; // 总页数
    private List<Customer> customers; // 当前页需要数据
}

 

 

 

[数据库]Oracle和mysql中的分页总结

标签:style   blog   http   color   使用   ar   java   strong   sp   

原文地址:http://www.cnblogs.com/DreamDrive/p/4025112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!