一.分页简介
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>
下章我们就实现页面数据的展示: