zoukankan      html  css  js  c++  java
  • JSP分页技术的实现(利用当前页进行前后加减,并利用href进行当前页面传值,传值当然是那个当前值变量)

    一、可滚动结果集

     

    Connection con  = DriverManager.getConnection();

    PreparedStatement stmt = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);

    ResultSet rs = stmt.executeQuery();

    常用方法:

    (1)rs.absolute(n);        可以将指针跳到第n行。

    (2)rs.relative(n);           可以将指针相对向下或向上n行。

    (3)rs.first();

    (4)rs.last();

    (5)int curRow = rs.getRow();    指针指向的当前行

     

    二、功能实现分解

     思路是,如果要显示那个页面,就要先算出来每个页面第一条记录是所有记录中的第几条记录,假设每页的第一条记录是总记录中的第position条记录,那么position=(ShowPage - 1)×PageSize+1。比如上图这个例子,如果要显示第一页,就要计算出第一页中的第一条记录是总的记录中的第一条记录;如果要显示第二页,就要计算出第二页中的第一条记录是总的记录中的第四条记录;如果要显示第三页,就要计算出第一页中的第一条记录是总的记录中的第九条记录。

    1.计算结果的个数

     

    rs.last();

    int size = rs.getRow();

    即可得到结果的个数。

    2.得到需要分几页

     

    如果一页能够放5条记录,则

    int pageCount = (size%5==0)?(size/5):(size/5+1);

    即可获得需要分几页。

    3.控制一页中规定显示记录个数

     

    如果一页能显示5条记录,可以通过使用count进行计数。

    int count = 0;

    do{

        if(count>=5) break;

        .....

        count++;

    }while(rs.next());

    通过break语句,能够使其显示到超过规定条目就跳出。

    4.如何知道当前是第几页

     

    通过HTTP get的特点,在地址栏中标明当前地址,如http://.......?curPage=1    表示现在是第一页。

    String tmp = request.getParameter("curPage");
    if(tmp==null){
           tmp="1";
    }
    curPage = Integer.parseInt(tmp);

    可以获得当前页。

    注意:

    rs.absolute(1);表示指向第一条记录;

    不存在rs.absolute(0);

    rs.absolute((curPage-1)*PAGESIZE+1);      把结果集指针调整到当前页应该显示的记录的开始.

    比如如果一页显示5条记录,当前页是第二页,则需要把指针调整到6,当前页是第三页,则需要把指针调整为11.

    5.点击首页、上一页、下一页、尾页的行为

     

    <a href="multipage.jsp?curPage=<%curPage+1%>" >下一页</a>

    <a href="multipage.jsp?curPage=<%curPage-1%>" >上一页</a>

    <a href="multipage.jsp?curPage=<%pageCount%>" >尾页</a>

    <a href="multipage.jsp?curPage=1" >首页</a>

    6.为了保存当前页位置,则需要把当前页位置设为全局变量。

     
    综合代码:
    [html] view plaincopy
     
    1. <%@ page contentType="text/html" pageEncoding="GB2312" language="java"%>  
    2. <%@ page import="java.sql.*"%>  
    3. <html>  
    4.     <head>  
    5.         <title>hello</title>  
    6.     </head>  
    7.     <body>  
    8.     <table border="1" spacing="2">  
    9. <%!  
    10.     public static final String DRIVER = "com.mysql.jdbc.Driver";  
    11.     public static final String USER = "root";  
    12.     public static final String PASS = "12345";  
    13.     public static final String URL = "jdbc:mysql://localhost:3306/MLDN";  
    14.     public static final int PAGESIZE = 5;  
    15.     int pageCount;  
    16.     int curPage = 1;  
    17. %>  
    18. <%  
    19.     //一页放5个  
    20.     String user = null;  
    21.     String pass = null;  
    22.     try{  
    23.         Class.forName(DRIVER);  
    24.         Connection con = DriverManager.getConnection(URL,USER,PASS);  
    25.         String sql = "SELECT empno,ename,job,hiredate,sal,comm FROM emp";  
    26.         PreparedStatement stat = con.prepareStatement(sql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);  
    27.         ResultSet rs = stat.executeQuery();  
    28.         rs.last();  
    29.         int size = rs.getRow();  
    30.         pageCount = (size%PAGESIZE==0)?(size/PAGESIZE):(size/PAGESIZE+1);  
    31.         String tmp = request.getParameter("curPage");  
    32.         if(tmp==null){  
    33.             tmp="1";  
    34.         }  
    35.         curPage = Integer.parseInt(tmp);  
    36.         if(curPage>=pageCount) curPage = pageCount;  
    37.         boolean flag = rs.absolute((curPage-1)*PAGESIZE+1);  
    38.         out.println(curPage);  
    39.         int count = 0;  
    40.           
    41.         do{  
    42.             if(count>=PAGESIZE)break;  
    43.             int empno = rs.getInt(1);  
    44.             String ename = rs.getString(2);  
    45.             String job = rs.getString(3);  
    46.             Date hiredate = rs.getDate(4);  
    47.             float sal = rs.getFloat(5);  
    48.             int comm = rs.getInt(6);  
    49.             count++;  
    50.             %>  
    51.         <tr>  
    52.             <td><%=empno%></td>  
    53.             <td><%=ename%></td>  
    54.             <td><%=job%></td>  
    55.             <td><%=hiredate%></td>  
    56.             <td><%=sal%></td>  
    57.             <td><%=comm%></td>  
    58.         </tr>  
    59.             <%  
    60.         }while(rs.next());  
    61.         con.close();  
    62.     }  
    63.     catch(Exception e){  
    64.           
    65.     }  
    66. %>  
    67. </table>  
    68. <href = "multipage.jsp?curPage=1" >首页</a>  
    69. <href = "multipage.jsp?curPage=<%=curPage-1%>" >上一页</a>  
    70. <href = "multipage.jsp?curPage=<%=curPage+1%>" >下一页</a>  
    71. <href = "multipage.jsp?curPage=<%=pageCount%>" >尾页</a>  
    72. <%=curPage%>页/共<%=pageCount%>页  
    73.   
    74. </body>  
    75. </html>  

    思路是,如果要显示那个页面,就要先算出来每个页面第一条记录是所有记录中的第几条记录,假设每页的第一条记录是总记录中的第position条记录,那么position=(ShowPage - 1)×PageSize+1。比如上图这个例子,如果要显示第一页,就要计算出第一页中的第一条记录是总的记录中的第一条记录;如果要显示第二页,就要计算出第二页中的第一条记录是总的记录中的第四条记录;如果要显示第三页,就要计算出第一页中的第一条记录是总的记录中的第九条记录。
           在JSP中的核心代码为如下(用的数据库为MySQL):

    复制代码 代码如下:

    <%!  int pageSize=4;
     int pageCount;
     int showPage;
     %>

    <!-- 连接数据库并从数据库中调取记录-->
    <%
     Connection con;
     Statement sql;
     ResultSet rs;

     try{Class.forName("com.mysql.jdbc.Driver");
     }catch(ClassNotFoundException e){
     }

     try{con=DriverManager.getConnection("jdbc:mysql://localhost:3306/message board","root","123456");
      sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
      //返回可滚动的结果集
      rs=sql.executeQuery("select * from messageinfo");
      //将游标移到最后一行
      rs.last();
      //获取最后一行的行号
      int recordCount=rs.getRow();
      //计算分页后的总数
      pageCount=(recordCount%pageSize==0)?(lastRow/pageSize):(lastRow/pageSize+1);

      //获取用户想要显示的页数:
      String integer=request.getParameter("showPage");
      if(integer==null){
       integer="1";
      }
      try{showPage=Integer.parseInt(integer);
      }catch(NumberFormatException e){
       showPage=1;
      }
      if(showPage<=1){
       showPage=1;
      }
      if(showPage>=pageCount){
       showPage=pageCount;
      }

      //如果要显示第showPage页,那么游标应该移动到的position的值是:
      int position=(showPage-1)*pageSize+1;
      //设置游标的位置
      rs.absolute(position);
      //用for循环显示本页中应显示的的记录
      for(int i=1;i<=pageSize;i++){  
     %>
       <table>
        <tr>
         <th><%=rs.getString("UserName") %></th>
         <td>发表于:<%=rs.getString("datetime") %></td>
        </tr>
        <tr >
         <th colspan="3"><textarea><%=rs.getString("content") %></textarea></th>
        </tr>
       </table>

     <%  
       rs.next();
      } 
      rs.close();
      con.close();
      }
      catch(Exception e){
      e.printStackTrace();}
     %>
     <br>
     第<%=showPage %>页(共<%=pageCount %>页)
     <br>
     <a href="ShowMessages.jsp?showPage=1">首页</a>
     <a href="ShowMessages.jsp?showPage=<%=showPage-1%>">上一页</a>
    <% //根据pageCount的值显示每一页的数字并附加上相应的超链接
      for(int i=1;i<=pageCount;i++){
     %>
       <a href="ShowMessages.jsp?showPage=<%=i%>"><%=i%></a>
    <% }
     %> 
     <a href="ShowMessages.jsp?showPage=<%=showPage+1%>">下一页</a>
     <a href="ShowMessages.jsp?showPage=<%=pageCount%>">末页</a>
     <!-- 通过表单提交用户想要显示的页数 -->
     <form action="" method="get">
      跳转到第<input type="text" name="showPage" size="4">页
      <input type="submit" name="submit" value="跳转">
     </form> 

    运行结果如下(为了简化代码,已经网页布局相关代码去掉,此处仅指功能):

  • 相关阅读:
    今天愣了半天硬是没想到用map,在此还原以下代码
    blob文件的存储和读取
    C#操作SQLite 报错 (Attempt to write a read-only database)
    Response.Flush()
    搜索
    直接给对方邮箱写邮件
    js
    会员模块(会员注册、会员登录、忘记密码、会员中心)
    标签大全
    网站在线留言
  • 原文地址:https://www.cnblogs.com/zhouxiansheng/p/4355708.html
Copyright © 2011-2022 走看看