分页关键的是sql语句要理解怎么写就完成一半了
案例: 现在对一个新闻首页的新闻进行分页
NewsDao dao=new NewsDao(); 对新闻操做的dao类
int pagesize=10; 每页面的数据数据量
int lastpage=1; 上一页初始为1
int nextpage=1; 下一页初始为1
int currentpage=1; 当前页初始为1
int totalrows=dao.count(); 获取总的新闻的记录条数
//计算总的页面数
int totalpage=totalrows%pagesize==0?
totalrows/pagesize:(totalrows/pagesize+1);
三元运算符当取出的记录数可以整除pagesize的话就去商为总页数,如果有余数则总页数还要加1
if(request.getParameter("page")!=null)
{
currentpage=Integer.parseInt(request.getParameter("page"));
}
如果为地址栏中url中为指定page参数,则为默认为1,如果存在page参数则赋给当前的页数 currentpage
判断上一页的页码,如果当前页为1,则上一页为1,否则为当前页减1
lastpage=currentpage==1?1:(currentpage-1);
判断下一页的页码,如果当前页为总页码的大小,则下一页也为最后一页,否则为当前页加1
nextpage=currentpage==totalpage?totalpage:(currentpage+1);
通过新闻的dao类获取此页的新闻数据,参数为pagesize页面的大小,参数currentpage为当前的页码
ArrayList<News> pagelist=dao.queryByPage(pagesize,currentpage);
数据库查询语句(这里使用的是SqlServer2005)
String sqlString="select top "+size+" newsid,title,publishtime from news where newsid not in (select top "+((page-1)*size)+" newsid from news order by newsid desc) order by newsid desc";
newsid 为新闻的编号,如果要查询6-10的数据,则要先查询出1-5的数据的newsid,然后选择数据时将newsid为1-5之间的排除掉再选择头5条(这里假设pagesize为5)
最后在需要显示分页的位置使用
<a href=”index.jsp?page=<%=1%>”>首页</a>
<a href=”index.jsp?page=<%=lastpage%>”>上一页页</a>
<a href=”index.jsp?page=<%=nextpage%>”>下一页页</a>
<a href=”index.jsp?page=<%=totalpage%>”>尾页</a>
这样就完成分页了,当然这是最基础的方法,网上也有现成网友做好的分页类可以使用,我这里也介绍一种
需要下载一个分页的文件,百度网盘已提供链接了http://pan.baidu.com/share/link?shareid=64635&uk=909074031
文件下载完毕后,需要将文件复制到在项目的WEB-INFO目录下才能使用
导入文件后,在需要分页的页面头部要加入下面一句话才能使用:
<%@taglib uri="/WEB-INF/MyPage.tld" prefix="pt"%>
最后在需要分页的位置使用标签
<pt:page pageIndex="<%=currentpage%>"
url="index.jsp?" pageMax="<%=totalpage%>"/>
这里的currentp,totalpage是和上面基础分页的一样的,查询语句也是一样的