JSP万能分页

     分页是每个JAVA EE程序员所必须掌握的, 之前也曾写过两篇关于分页的博文。 一种是将所有记录查询出来存进Session中, 一种则是利用数据库本身的特征来分页。 一直以来都想构造一种非常通用的分页方法, 今天新鲜出炉了, 不过只是考虑到其通用性而没有顾及其效率、性能等了。

       核心代码:

     <body>
    <%
     int recordCount;  //记录总数
     int perpageSize=5; //每页显示记录数
     int pageCount;  //需显示总页数
     int intPage;   //待显示页码
     int i=0;
     int currPageBegin;
     
     String url="jdbc:oracle:thin:@localhost:1521:oracle";
     String userName="scott";
     String userPwd="tiger";
     
     Connection conn=null;
     Class.forName("oracle.jdbc.driver.OracleDriver");
     conn = DriverManager.getConnection(url, userName, userPwd);
     Statement stmt = stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
     String sqlcmd=request.getParameter("sqlcmd");
     String strpage=request.getParameter("strpage");
     System.out.println("sqlcmd: "+sqlcmd+",pageNum:"+strpage);
     %>
    
     <%
     //对传入的页码数进行判断处理
     if(strpage==null){
      intPage = 1;
     }else{
      intPage = Integer.parseInt(strpage);
      if(intPage<1) intPage=1;
     }
      %>
     
      <%
      ResultSet rs=null;
      //动态执行分页查询SQL
     rs = stmt.executeQuery(sqlcmd);
     //指针记录移动到最后一条记录
     rs.last();
     //得到数据集中总记录数
     recordCount = rs.getRow();
     //得到总页数
     pageCount = (recordCount+perpageSize-1)/perpageSize;
     //重新设置待显示页码
     if(intPage>pageCount) intPage = pageCount;
     //得到字段描述信息
     ResultSetMetaData metaData = rs.getMetaData();
     StringBuffer hdata = new StringBuffer();
     int colCount = metaData.getColumnCount();//得到总的字段数
     hdata.append("<tr bgcolor=#ffccff>");
     //输出表格列名
     for(i=1;i<=colCount;i++){
      hdata.append("<td align=center>"+metaData.getColumnName(i)+"</td>");
     }
     hdata.append("</tr>");
     //定位记录指针到(intpage-1)*perPageSize行
     rs.absolute((intPage-1)*perpageSize+1);
     int j=0;
       %>
      
       <%
       //从结果集中取得perpageSize条记录,作为当前页数据输出
     while((j<perpageSize) && (!rs.isAfterLast())){
      hdata.append("<tr bgcolor=#f0ffff>");
      for(int k=1;k<=colCount;k++){
       hdata.append("<td align=center><font size=2>"+rs.getString(k)+"</font></td>");
       
      }
      hdata.append("</tr>");
      rs.next();
      j++;
     }
        %>
      
       <table align="center" border="1" cellspacing="0" width="85%">
       <%=hdata.toString() %>
       </table>
       <center><br><br>
       共<%=pageCount %>页  第<%=intPage %>页
       <%
       if(intPage>1)
       {
        %>
        <a href="pagesplit.jsp?strpage=<%=intPage-1 %>&&sqlcmd=<%=sqlcmd %>">上一页</a>
        <%} else{ %>
        上一页<%} %>
       
        <% if(intPage<pageCount)
        {%>
        <a href="pagesplit.jsp?strpage=<%=intPage+1 %>&&sqlcmd=<%=sqlcmd %>">下一页</a>
        <%}else{ %>
        下一页<%} %>
       </center>
      
       <%
       rs.close();
       stmt.close();
       conn.close();
        %>
       
       

<center><a href="select_table.jsp">继续输入分页SQL</a></center>
  </body>

 

    不用说, 上述代码的可读性很差, 之前也学过一点点关于自定义标签的使用。 我正酝酿着将其做成一个分页标签

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值