第四讲 分页技术
为了能很好的将分页技术的内容进行重用,我将分页放在一个函数中:
page_devided(pw,req);//绘制表格函数
既然要分页,那么就需要先确定一些基本的数据:总共多少页,每页多少行,当前显示哪页和一共有多少行数据。
- int
pageSize=3;//每页多少条 - int
pageNow=1;//当前显示页数 - int
pageCount=0;//一共多少页,计算得到 - int
rowCount=0;//一共多少记录, 从数据库查
先从数据库中查得到总共多少条记录:
- mySqlConnection
msc=new mySqlConnection(); - String
sql="select count(*) from mydb.users"; - ResultSet
rs=msc.EQ(sql); - try
{ - if(rs.next()){
- rowCount=rs.getInt(1);
//得到记录的条数 - }
- }
catch (SQLException e) { - e.printStackTrace();
- }
然后计算需要多少页来存放这些数据:
- if(rowCount%pageSize==0){//总数除以每页数是否整除,求总页数 pageCount=rowCount/pageSize;
- }else{
- pageCount=rowCount/pageSize+1;
- }
接下来要查询得到对象,是当前页面应该显示的数据:
- rs=
msc.EQ("select * from mydb.users "+ - "where
ID not in "+ - "(select
t.ID from (select * from mydb.users limit " - +pageSize*(pageNow-1)+")as
t) limit "+pageSize); - //用limit的not
in 排除掉当前页面前的数据,再取limit
接下来要打印显示的表格和控制显示的超链接:
-
- try
{//打印表格 - pw.println("<table
border=1>"); - pw.println("<tr>
<th>ID</th> <th>NAME</th> <th>PASSWD</th> </tr>");//表头 - while(rs.next()){
- pw.println("<tr>");//每一个tr是为一行
- pw.println("<td>"+rs.getInt(1)+"</td>");//ID
- pw.println("<td>"+rs.getString(2)+"</td>");//用户
- pw.println("<td>"+rs.getString(3)+"</td>");//密码
- pw.println("</tr>");
- }
- pw.println("</table>");
- //控制页面的超链接
- if(pageNow>1){
- pw.println("<a
href=wellcome?pagenow="+(pageNow-1)+">上一页</a>"); - }
- for(int
i=pageNow;i<=pageNow+4;i++){//在这里控制显示的连接总数 - pw.println("<a
href=wellcome?pagenow="+i+">"+i+"</a>"); - }
- if(pageNow<=pageCount){
- pw.println("<a
href=wellcome?pagenow="+(pageNow+1)+">下一页</a>"); - }
- }
catch (SQLException e) { - e.printStackTrace();
- }
最后要在函数头上加上动态跳转的语句:也即是后面的连接触发了变量传值,改变了pageNow的值,每次触发页面都会重新加载页面,也就会重新加载函数,从而改变当前显示的表格页面:
- //动态接收pageNow,来跳转表格页面
- String
spageNow=req.getParameter("pagenow"); - System.out.println(spageNow);
- if(spageNow!=null){
- //用户不是第一次进入
- pageNow=Integer.parseInt(spageNow);
- }
下面给出完整的分页函数:
==========================================================================
- public void page_devided(PrintWriter pw,HttpServletRequest req){
- int pageSize=3;//每页多少条
- int pageNow=1;//当前显示页数
- int pageCount=0;//一共多少页,计算得到
- int rowCount=0;//一共多少记录, 从数据库查
- //动态接收pageNow,来跳转表格页面
- String spageNow=req.getParameter("pagenow");
- System.out.println(spageNow);
- if(spageNow!=null){
- //用户不是第一次进入
- pageNow=Integer.parseInt(spageNow);
- }
- mySqlConnection msc=new mySqlConnection();
- String sql="select count(*) from mydb.users";
- ResultSet rs=msc.EQ(sql);
- try {
- if(rs.next()){
- rowCount=rs.getInt(1); //得到记录的条数
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
-
- if(rowCount%pageSize==0){//总数除以每页数是否整除,求总页数
- pageCount=rowCount/pageSize;
- }else{
- pageCount=rowCount/pageSize+1;
- }
- rs= msc.EQ("select * from mydb.users "+
- "where ID not in "+
- "(select t.ID from (select * from mydb.users limit "+pageSize*(pageNow-1)+")as t) limit "+pageSize);
- //用limit的not in 排除掉当前页面前的数据,再取limit
- try {//打印表格
- pw.println("<table border=1>");
- pw.println("<tr> <th>ID</th> <th>NAME</th> <th>PASSWD</th> </tr>");//表头
- while(rs.next()){
- pw.println("<tr>");//每一个tr是为一行
- pw.println("<td>"+rs.getInt(1)+"</td>");//ID
- pw.println("<td>"+rs.getString(2)+"</td>");//用户
- pw.println("<td>"+rs.getString(3)+"</td>");//密码
- pw.println("</tr>");
- }
- pw.println("</table>");
- //控制页面的超链接
- if(pageNow>1){
- pw.println("<a href=wellcome?pagenow="+(pageNow-1)+">上一页</a>");
- }
- for(int i=pageNow;i<=pageNow+4;i++){
- pw.println("<a href=wellcome?pagenow="+i+">"+i+"</a>");
- }
- if(pageNow<=pageCount){
- pw.println("<a href=wellcome?pagenow="+(pageNow+1)+">下一页</a>");
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }