分页技术

来源:互联网 发布:中国编程语言排名 编辑:程序博客网 时间:2024/05/17 15:05

基本思路

1、 定义4个变量

int page_persize=2;//每页显示记录数  int page_total=0;//总的页数  int page_now=1;//当前页码  int rs_total=0;//总的记录数

2、读取所有记录给rs

String sql="select  * from userlist ";  ResultSet rs = connDbBean.executeQuery(sql); 

3、计算总记录数rs_total

    rs.last();//指针到最后一条记录      rs_total=rs.getRow();//读出当前行号即总的记录数  

4、计算总页数

    if (rs_total % page_persize==0)          page_total=rs_total/page_persize;      else          page_total=rs_total/page_persize+1;  

5、得到当前的页码

    try{      if (!(request.getParameter("page_now")==null || request.getParameter("page_now").equals("")))      page_now=Math.min(Math.abs(Integer.parseInt(request.getParameter("page_now"))),page_total);      }catch(java.lang.NumberFormatException e){      out.print("指定页码格式不正确"+e);      }      if (page_now==0) page_now=1;  

6、根据页码使指针指向相应页码的第一条记录

    rs.absolute((page_now-1)*page_persize+1);  

7、判断是否有记录并使用for循环显示当前页的记录

    rs.previous();      for(int i=1;i<=page_persize;i++)      {      if (!rs.next()) break;//如果记录数不够则中断循环      }    

8、显示页码导航(方式灵活多样,不再赘述)

    <p align=center>      <%      //显示页码导航,其中的问号表示由当前页面处理。      out.print("总共"+rs_total+"条记录 ");      if (page_total>1){      out.print("当前第"+page_now+"页 ");      out.print("共"+page_total+"页 ");      if(page_now!=1) {              out.print("<a href=?page_now=1>首页</a> ");              out.print("<a href=?page_now="+(page_now-1)+">上一页</a> ");          }      if(page_now!=page_total){          out.print("<a href=?page_now="+(page_now+1)+">下一页</a> ");          out.print("<a href=?page_now="+page_total+">尾页</a> ");          }      %>      <form action="?" method="post"><!--问号表示由当前页面处理 -->          <table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">            <tr>              <td><div align="center">跳转到:                <input name="page_now" type="text" size="3" />                      <input name="submit" type="submit" value="提交" />              </div></td>            </tr>          </table>      </form>      <% } %>      </p>  

例子1:

    <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">      <html xmlns="http://www.w3.org/1999/xhtml">      <head>      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />      <title>read</title>      </head>      <body style="text-align:center">      <a href="add.jsp">add</a>      <form method='post' action="search.jsp">        <input type="text" name="str">        <input type="submit" value="search">      </form>      <table border="1" cellspacing="0" cellpadding="3">        <tr>          <td>id</td>          <td>title</td>          <td>content</td>          <td>删除</td>          <td>编辑</td>        </tr>        <%              Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");             String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=dataBase;user=sa;password=sa;";          Connection conn = DriverManager.getConnection(connectionUrl);                Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);          //定义四个变量          int page_persize=2;//每页显示记录数          int page_total=0;//总的页数          int page_now=1;//当前页码          int rs_total=0;//总的记录数          //产生结果集          String sql="select * from dataTableName";                 ResultSet rs=stmt.executeQuery(sql);            //计算总的记录数            rs.last();//指针到最后一条记录          rs_total=rs.getRow();//读出当前行号即总的记录数          //计算总的页数          if (rs_total % page_persize==0)              page_total=rs_total/page_persize;          else              page_total=rs_total/page_persize+1;          //计算当前页码          try{          if (!(request.getParameter("page_now")==null || request.getParameter("page_now").equals("")))          page_now=Math.min(Math.abs(Integer.parseInt(request.getParameter("page_now"))),page_total);          }catch(java.lang.NumberFormatException e){          out.print("指定页码格式不正确"+e);          }          if (page_now==0) page_now=1;          //指针跳转到要访问的页码的第一条记录          rs.absolute((page_now-1)*page_persize+1);          //循环显示当前页码的内容          for(int i=1;i<=page_persize;i++)          {              %>                  <tr>                  <td><%=rs.getString(1)%></td>                  <td><%=rs.getString(2)%></td>                  <td><%=rs.getString(3)%></td>                  <td><a href="del.jsp?id=<%=rs.getString("id")%>">删除</a></td>                  <td><a href="edit.jsp?id=<%=rs.getString("id")%>">编辑</a></td>                  </tr>              <%          if (!rs.next()) break;//如果记录数不够则中断循环          }          //关闭          rs.close();                 stmt.close();                 conn.close();        %>      </table><br>      <%      //显示页码导航,其中的问号表示由当前页面处理。      out.print("总共"+rs_total+"条记录 ");      if (page_total>1){      out.print("当前第"+page_now+"页 ");      out.print("共"+page_total+"页 ");      if(page_now!=1) {              out.print("<a href=?page_now=1>首页</a> ");              out.print("<a href=?page_now="+(page_now-1)+">上一页</a> ");          }      if(page_now!=page_total){          out.print("<a href=?page_now="+(page_now+1)+">下一页</a> ");          out.print("<a href=?page_now="+page_total+">尾页</a> ");          }      %>        <form action="?" method="post">          <!--问号表示由当前页面处理 -->          <table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">            <tr>              <td><div align="center">跳转到:                  <input name="page_now" type="text" size="3" />                  <input name="submit" type="submit" value="提交" />                </div></td>            </tr>          </table>        </form>        <% } %>      </body>      </html>  

例2:使用了javabean

    <%      int page_persize=2;//每页显示记录数      int page_total=0;//总的页数      int page_now=1;//当前页码      int rs_total=0;//总的记录数      String sql="select * from userlist";       ResultSet rs=connDbBean.executeQuery(sql);       rs.last();//指针到最后一条记录      rs_total=rs.getRow();//读出当前行号即总的记录数      if (rs_total % page_persize==0)          page_total=rs_total/page_persize;      else          page_total=rs_total/page_persize+1;      try{      if (!(request.getParameter("page_now")==null || request.getParameter("page_now").equals("")))      page_now=Math.min(Math.abs(Integer.parseInt(request.getParameter("page_now"))),page_total);      }catch(java.lang.NumberFormatException e){      out.print("指定页码格式不正确"+e);      }      if (page_now==0) page_now=1;      rs.absolute((page_now-1)*page_persize+1);      for(int i=1;i<=page_persize;i++)          {       //循环体          if (!rs.next()) break;//如果记录数不够则中断循环          }      rs.close();      connDbBean.closeStmt();         connDbBean.closeConn();         //显示页码导航,其中的问号表示由当前页面处理。      out.print("总共"+rs_total+"条记录 ");      if (page_total>1){      out.print("当前第"+page_now+"页 ");      out.print("共"+page_total+"页 ");      if(page_now!=1) {              out.print("<a href=?page_now=1>首页</a> ");              out.print("<a href=?page_now="+(page_now-1)+">上一页</a> ");          }      if(page_now!=page_total){          out.print("<a href=?page_now="+(page_now+1)+">下一页</a> ");          out.print("<a href=?page_now="+page_total+">尾页</a> ");          }      %>      <form action="?" method="post"><!--问号表示由当前页面处理 -->          <table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">            <tr>              <td><div align="center">跳转到:                <input name="page_now" type="text" size="3" />                      <input name="submit" type="submit" value="提交" />              </div></td>            </tr>          </table>      </form>      <% } %>  

身为一个后端小能手,怎么能不写 分页 呢!
虽然这个是copy刘网管(老师)的,数据库也是sql server,但是学会这个技术就好。

大家可以去看刘网管(老师)的博客,里面有jsp系列教程,但是讲的有点浅,不是很详细,O(∩_∩)O~。

http://zhiyongliu.iteye.com/blog/1700891

0 0
原创粉丝点击