黑马程序员技术交流社区

标题: SQLserver、ORACLE、Mysql中实现分页的机制各是什么 [打印本页]

作者: 王中伟    时间: 2013-7-14 20:13
标题: SQLserver、ORACLE、Mysql中实现分页的机制各是什么
本帖最后由 杨兴庭 于 2013-7-15 12:09 编辑

SQLserver、ORACLE、Mysql中实现分页的机制各是什么
作者: iBadboy    时间: 2013-7-14 20:43
网上看到的,希望对你有帮助。

1.MySql中的limit关键字

以模糊查询为例子,limit写到where子句的后面

select * from user where name like '%mm%' limit startrow,readsize;

其中值得推敲的是startrow和readsize也就是开始和读取的记录数

这样查询出来的结果集是从startrow行,读取endsize条记录,实际上查询到的结果集是startrow+1到startrow+readsize的结果,这是操作中我们应该注意的,结果集不包括startrow.

2.Oracle中的rownum关键字

select name,email from (select rownum rn ,name ,email  from user  where rownum <endrow) t where t.rn>=sartrow

这样我们就可以得到startrow到endrow结果集,注意结果集合不包括endrow当前行记录,如果条件子句中不是>=startrow,那么查询到的结果集是也不包括startrow当前行记录。

Oracle中主要用到rownum这个伪字段,子查询得到的记录集包括了一个rownum字段,由于Oracle中rownum字段都是从1开始递增的,查询到几条记录就递增到几,所以我们应从后向前截取要查询的记录,并将rownum固定为结果集合的一个字段,然后再使用外层查询就可以以结果集的rownum固定住的字段来利用where子句来操纵记录了。
作者: 杨兴庭    时间: 2013-7-14 20:46
SQLserver和Mysql的分页是根据SQl语句来实现分页效果的,ORACLE我没有学过我不清楚,不过肯定也是通过SQl语句来实现分页的

首先要给你的项目提供指定数据库驱动,并写好JDBC连接数据库代码(如果楼主这些都不知道的话我也不知道怎么解释了,太多内容了)
  1. <!--SqlServer分页sql语句-->

  2. SELECT TOP pageSize * FROM t_news
  3. WHERE (id NOT IN
  4.           (SELECT TOP ((currentPage-1)*pageSize) id FROM t_news ORDER BY id)
  5.       )
  6. ORDER BY ID
复制代码
MySql分页就更简单了,只需要在你的SELECT语句后面加上
  1. limit +(currentPage-1)*pageSize+","+pageSize;
复制代码
当然楼前提要楼主先定义好分页的javaBean,属性分别定义currentPage,pageSize,maxPage,countRows,并提供getter和setter方法



作者: wll_sx1990    时间: 2013-7-14 22:31
lz,我只学过mysql,所以从mysql的角度给你回答吧,假如说数据库中有张员工表worker,1000个记录,要从199记录起获取100条,可以是select * from worker limit 199,100;可见是通过语句可以实现。但是必须提前为dao准备号需要的pageInfo信息(包含当前起始记录,和每页显示的总记录)。

也可以通过另一种方式实现不过我不会。
作者: 张云杰    时间: 2013-7-15 02:34
分页数字由页面传到后台语句做查询.. 是个动态的
int startnum = 0;
int endnum = 10;
String sql = "select  *  from  table where rownum in ("+startnum+","+endnum+")";// 太久没写了.. 其实还要算上当前页,而且分页的查询有很多种形式
返回一个List
只会一个oracle ..  其他的不会




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2