一.分页简介
1.分页,就是一种将数据库里的数据一部分展示给用户的技术。为什么要这样做呢?因为一般来说用户在查询时数据是非常多的,当一个页面不能显示所有数据时,我们就要对查询的数据进行分页,就像我们的书本分成一页一页一样。最简单的例子就是百度,当你百度时,成千上万的数据,并不是呈现在一个页面的。
2.分页的实现方式
1)假分页(不推荐):什么是假分页呢?假分页就是一次性将数据库里的数据全部取出来,存储在页面中,然后再将数据分别展示出来。这种假分页在数据少的还可以玩玩,当数据多起来的时候,这种方式就爆炸了。由于一次取出的数据太大,会导致你的页面爆炸,点下一页要等很久,用户体验感很差,所以不推荐使用。
2)真正的分页:真正的分页就是你的页面需要多少数据,就去数据库取多少数据。这种分页就十分灵活了,在对付数据庞大的查询时,有很大的优势。所以我们这次的笔记就使用这样的方式。
二.数据库分页查询
数据库分页查询,就是根据页面的需要,一次只查询部分的数据,当用户点击下一页的时候就继续查询另外的数据。现在主流的数据库主要有三种:Oracle、MySQL、SQL server,我们接下来就看看,三种数据库对应分页查询的方法。
1.MySQL——相对来说最简单分页查询
MySQL的分页查询要用到 limit关键字,方式就是 limit m,n m表示第几条数据 n表示从m+1开始取多少条数据,比如
select * from table limit m,n 其中m是指记录开始的index,从0开始,表示第一条记录
具体:select * from tableName where 条件 limit 当前页码*页面容量-1,页面容量
2.Oracle 分页
Oracle分页要用到的关键字是 rownum (行号),我们直接看它的用法
1)查询表中的前n条记录 : select * from Table where rownum <= n
2)查询第 n 到第 m 条记录 :select * from (select 表名.*, rownum rn from 表名 where rownum <=m) where rn > n;
对于这种形式的查询,oracle不像mysql那么方便,它必须使用子查询或者是集合操作来实现。
3.SQL server的分页
在分页查询上,我感觉SQL Server比较费劲,没有一个专门的分页的语句,并且每个版本对应的查询方式不一样,比如:
1)SQL Server 2000数据库分页
Select top pagesize * from 表名 where 列名 not in(select top pagesize*page 列名 from 表名 order by 列名) order by 列名
2)SQL Server 2005数据库分页(后面的数据分页就大同小异了)
Select * from (select 列名,row_搜索number() over(order by 列名1) as 别名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow
三.页面的编写
数据的分页查询学会了,我们就要规划页面如何在页面显示了。一般的网页中,我们都是以表格的样式呈现数据的,所以我们先把jsp页面做好,再去通过编写后台代码让数据呈现在页面上,这里我给出了我们测试的jsp页面:
效果图:
附上代码:
<div class="search">
<p>申请日期:</p>
<select id="time">
<option >选择日期</option>
</select>
<input class="button" type="submit" name="" value="查询"></input>
<div class="tuxin"><img src="../../images/图形化报表.png"> <a href="#">图形报表</a></div>
<div class="dayin"><img src="../../images/打印机.png"> <a href="#">导出打印</a></div>
<form>
<p>采购编号:</p>
<input type="text" name="">
<p>材料名称:</p>
<input type="text" name="">
<input class="button" type="submit" name="" value="查询"></input>
<input type="reset" class="button" value="重置" style="background:#e4e1e1;color:#000"></input>
</form>
</div>
<div class="contents">
<table class="table">
<tr>
<td>申请日期</td>
<td>申请人</td>
<td>采购员</td>
<td>材料编号</td>
<td>材料名称</td>
<td>规格型号</td>
<td>计量单位</td>
<td>申请数量</td>
<td>备注</td>
<td>操作</td>
</tr>
<tr>
<td>2017/8/7</td>
<td>小贤</td>
<td>张三</td>
<td>1001</td>
<td>玻璃</td>
<td>100X100X3</td>
<td>cm(厘米)</td>
<td>1000</td>
<td>无</td>
<td><a class="delete" href="#"><img src="../../images/delete_8e.png"></a></td>
</tr>
</table>
<div class="paging">
<a class="button" href="">上一页</a>
<a href="#">1</a>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">4</a>
<a href="#">5</a>
<a class="button" href="">下一页</a>
<p>共<span>5</span>页 到第</p>
<input type="text" name="">
<p style="margin:2px -1px 0 10px;">页</p>
<input class="button" type="submit" value="确认">
</div>
下章我们就实现JSP页面的分页: