分页显示
实现分页显示,需要关注几点关键点
1.确定每页显示的数量
要根据实际的页面设计,确定每个页面显示多少条数据,就是说每次从数据库中需要查询多少数据显示在页面上。
2.计算显示的页数
要进行分页显示,那我们就要知道数据库的总总数量,要分成多少页去显示。
(1)通过查询得到数据库中数据的总记录数 (Oracl数据库)
- public int getCount{
- String nsqlString="select count(*)
- from news";
- int count=0;
- //....省略执行代码
- if(rs.next()){
- count=rs.getInt(1);
- }
- return count;
- }
(2)有了数据库的总记录数 我们就可以根据每页显示的数量计算出总共要分几页显示了
- public int getTotalPages(int count,int pageSize){
- int totalpages=0;
- totalpages=(count%pageSize==0)?
- (count/pageSize):(count/pageSize+1);
- return totalpages;
- }
3.编写SQL语句
(Oracle数据中)
- <%
- String sql="select * from (select rownum as r, t.*"+" form (select news.* from news order by ndate desc) t"+
- " where rownum<=10) where r>5"
- %>
rownum是Oracle数据库提供的一组称为伪劣的数据库列
rownum作用是表示行号
代码执行的结果是查询news表中的第6条~第10条的数据
这样我们总结出一个规律:
1) 每页显示的第一条数据行号应该等于每页显示数据量*(当前页页码-1)。
2) 每页显示的最后一条数据行号应该等于每页显示的数据量*当前页页码。
- <%
- String sql="select * from (select rownum as r, t.* from ("+
- "select news.* from news order by ndate desc) t " +
- "where rownum<="+pageSize*pageIndex+") where r>"+
- pageSize*(pageIndex-1);
- %>
其中pageSize变量表示每页显示的数据条数
pageIndex变量表示当前页的页码
4.在JSP页面中分页设置
(1) 确定当前页
- <%
- String currentPage=request.getParameter("pageIndex")//获得当前页数
- if(currentPag==null){
- currentPage=1;
- }
- int pageIndex=Integer.parseInt(currentPage);
- %>
(2) 分页设置
- <%
- <a href="news_list.jsp?pageIndex=1">首页</a>
- <a href="news_list.jsp?pageIndex=<%=pageIndex-1>">上一页</a>
- <a href="news_list.jsp?pageIndex=<%=pageIndex+1>">下一页</a>
- <a href="news_list.jsp?pageIndex=<%=totalpages%>">末页</a>
- %>
(3) 首页与末页的控制
- <%
- String currentPage=request.getParameter("pageIndex");
- if(currentPage==null){
- currentPage="1";
- }
- int pageIndex=Integer.parseInt(currentPage);
- //对首页与末也进行控制
- if(pageIndex<1){
- pageIndex=1;
- }else if(pageIndex>totalpages){
- pageIndex=totalpages;
- }
- %>
下面就来看一下完整的JSP页面分页的代码
- <%@ page contentType="text/html; charset=UTF-8" %>
- <%@ page import="java.sql.*,org.jbit.news.model.*" %>
- <%
- NewsModel nm=new NewsModel(); //封装了查询新闻的方法
- int pageSize=10; //每页显示记录
- //最大页数
- int totalpages=nm.getTotalPages("select * from news",pageSize);
- String currentPage=request.getParameter("pageIndex"); //获取当前页数
- if(currentPage==null){
- currentPage="1";
- }
- int pageIndex=Integer.parseInt(currentPage);
- if(pageIndex<1){
- pageIndex=1;
- }else if(pageIndex>totalpages){
- pageIndex=totalpages;
- }
- String sql="select * from (select rownum as r, t.* from (" +
- "select news.* from news order by ndate desc) t " +
- "where rownum<="+pageSize*pageIndex+") where r>"+
- pageSize*(pageIndex-1);
- List list=nm.display(sql); //调用查询方法 返回新闻集合
- %>
- <!-- 省略循环显示新闻标题的代码 -->
- 当前页数:[<%=pageIndex %>/<%=totalpages %>]
- <%
- if(pageIndex<1){ //控制页面显示分格
- %>
- <a href="news_list.jsp?pageIndex=1">首页</a>
- <a href="news_list.jsp?pageIndex= <%= pageIndex-1%>">上一页</a>
- <%}
- if(pageIndex<totalpages){
- %>
- <a href="news_list.jsp?pageIndex= <%= pageIndex+1%>">下一页</a>
- <a href="news_list.jsp?pageIndex=<%=totalpages %>">末页</a>
- <%} %>