A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨兴庭 于 2013-7-15 12:09 编辑

SQLserver、ORACLE、Mysql中实现分页的机制各是什么

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

4 个回复

倒序浏览
网上看到的,希望对你有帮助。

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子句来操纵记录了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
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方法


评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

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

也可以通过另一种方式实现不过我不会。

评分

参与人数 1黑马币 +3 收起 理由
杜光 + 3 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
分页数字由页面传到后台语句做查询.. 是个动态的
int startnum = 0;
int endnum = 10;
String sql = "select  *  from  table where rownum in ("+startnum+","+endnum+")";// 太久没写了.. 其实还要算上当前页,而且分页的查询有很多种形式
返回一个List
只会一个oracle ..  其他的不会
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马