jdbc mysql 分页查询_jdbc之分页查询

分页查询作为一项十分重要的数据库查询技术,在很多web项目中都会要用到,当然移动开发中也是会涉及的。

一、分页查询的sql语句:

ps:为了方便阐述,下面统一使用student表作为查询的表;colName表示student表中的某个字段名字。

1、mysql

select * from student (order by colName) limit m, n;

参数解释  m:表示要查询记录的上一行的行号,比如要从第1条记录开始查则m取0;

n:表示希望从m+1开始查询多少条记录;

示例:

studet表中的数据如下

1ad716b846b9639b69b7e72b429f2e28.png

4c37aed9f49b2c2c87c9529d2a58b5a9.png

c12db06f64c64ebe78fe51d76463ee0f.png

95a92199e1a35c746d261598cdb3e5fe.png

2、oracle

select * from (select t.*,rownum rn from (select * from student) t where rownum<=m) where rn>=n;

m:查询的最大行号;

n:查询的最小行号;

这样查询的结果行数为:m-n+1

示例:

student表中的数据如下:

0a8e5e774f094d2e4e148bc01eaad2b7.png

a1d6f4f792b296e465d422f979c80039.png

3、sql server

实现的sql语法有多种:

①利用ID大于多少

select top 4 * from student where stuid>( select max(stuid) from ( select top 2 stuid from student order by stuid ) as t ) order by stuid;

②利用not in

select top 4 * from student where stuid not in ( select top 2 stuid from student order by stuid) as t order by stuid;

③利用颠倒型top

select * from ( select top 4 * from ( select top 6 * from student order by stuid )  as t order by t.stuid desc ) as t1 order by t1.stuid;

④使用ROW_NUMBER()函数

select * from ( select *,row_number() over (order by stuid) as rank from student ) as t where t.rank between 3 and 6;

由于没怎么用sql server,所以电脑上没装,这里就不给出查询示例了。

二、jdbc中如何实现动态分页

1、四个重要参数

pageNow  当前的页码

pageCount 总页数

pageSize  每页中显示多少条记录

rowCount   表中记录的总行数

2、根据rowCount和pageSize计算pageCount的小算法

①  if(rowCount % pageSize == 0) {

pageCount = rowCount / pageSize;

} else {

pageCount = rowCount / pageSize + 1;

}

②  pageCount = rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize  + 1;

③  pageCount = (rowCount - 1) / pageSize + 1;

原理是一样的,只是给出了三种形式,个人比较喜欢③。

3、将pageSize和pageNow用在jdbc的sql语句中查询当前页的记录

⑴mysql

select * from student (order by colName) limit (pageNow-1)*pageSize, pageSize;

⑵oracel

select * from (select t.*,rownum rn from (select * from student) t where rownum<=pageNow*pageSize) where rn>=(pageNow-1)*pageSize+1;

⑶sql server

select top pageSize * from student where stuid>( select max(stuid) from ( select top (pageNow-1)*pageSize stuid from student order by stuid ) as t ) order by stuid;

sql server分页查询语句中,这条语句的效率较高,其他的几种查询形式这里就不讨论了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值