快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

我终于理解了JSP 的分页了


我们查询数据库的时候,假如查询出来的结果是很多条,比如1000条,那么,假如都显示到一个页面上简直是令人无法忍受的事情!所以我们要分页显示,每页显示10或20行,分页的目的就这样简朴.




 


分页的方式有很多种,也许有些效率要高些,我这里只能参考最简朴能实现的方式:现查询出有多少条记录,然后计算出一共分几页,然后分别显示每一页.



查询出有多少条记录:



select count(*)from learning




 


计算分多少页:



if(counts%pageSizes==0){pageCounts=counts/pageSizes;}



else{pageCounts=counts/pageSizes+1;}



int i=(intPage-1)*pageSizes;(书上的算法很笨,用我这里自己想的,没有错)



上面就是判定是否最后一页显示满,如, 93条记录,每页显示5条,那么最后一页要显示3条,一共19页显示!开始考虑的时候我考虑100页,哈哈,很特别的,不具有代表性,看来思维的方式很重要,弱智吧?




 


然后就是分别显示这些页了,



String query=" Select * "+



             " from learning "+



             " where article_id like \\\'%\\\' ";



这里我们碰到麻烦了,如何显示?是先查出5条放在哪里?一个什么样的数据结构里?还是划分数据库的记录的条数?也许从这里我们可以考虑出分页至少有2种方式:这里我们采用后一种,这种方式的内容是:rs的遍历和每页多少条记录的结合:




 


int i=(intPage-1)*pageSizes;//判定每一页能遍历到第几条记录



ps=conn.prepareStatement(query);



ResultSet rs1=ps.executeQuery();



for( int  j=0; j<i ; j++)



rs1.next();//当是第一页的时候,rs从第0条开始,假如是第二页,从第(2-1)*5条元组开始遍历,假如第3页,将从第10条开始遍历



最后: while(rs1.next()&&i<pageSizes){ i++;}很要害,即控制了每页显示的条数,又控制了编历的范围.



最后有一个问题是: ResultSet rs1 为什么不用原先的rs?假如不理解这个,可以说没有理解到这种分页的做法,因为rs在查询记录总数的时候已经指向了第一个,假如继承使用,将从查询出来的第二条记录开始显示了!这个问题是我刚调试好分页时候出现的bug,看来都是先出现问题,再分析原因,再真正理解过程产生的原因.




 


下面还要在显示分页的内容之外加一个from , 里面提供链接来对当前页数的id+1(减1)来显示上一页或下一页的内容!




 


刚理解了分页,就立刻记下来,加深印象,更不敢独享领悟后的喜悦!



以下是JSP 分页的代码:




 



 



*****************************



<%Cookie cookies[]=request.getCookies();if(cookies==null){ response.sendRedirect("login.jsp"); }%><%@ include file="articleconn.jsp"%><html>



<head><meta http-equiv="Content-Type" content="text/html; charset=big5"><title>治理文件</title><meta name="GENERATOR" content="Microsoft FrontPage 4.0"><!--link rel="stylesheet" href="css/article.css"--></head>



<%request.setCharacterEncoding("big5");String query=" Select * "+             " from learning "+             " where article_id like \\\'%\\\' ";String queryCount=" select count(*)from learning ";String strPage=request.getParameter("strPage");int intPage;if(strPage==null){intPage=1;}elseintPage=Integer.parseInt(strPage);



int pageSizes=5;int counts=1;int pageCounts=1;



try{PreparedStatement ps=conn.prepareStatement(queryCount);ResultSet rs=ps.executeQuery();if(rs.next()){counts=Integer.parseInt(rs.getString(1));}







%><body bgcolor="#FFFFFF">  <p>&nbsp;</p>  <table width="700" border="1" cellspacing="0" cellpadding="0" align="center" bordercolorlight="#000000" bordercolordark="#FFFFFF">    <tr bgcolor="#99CCFF">      <td height="10" bgcolor="#B5D85E">        <div align="center">          <b>管 理 界 面</b>        </div>      </td>    </tr>    <tr>      <td height="49">        <%-- 分?? --%>        <p align="left">          <a href="add.jsp">添加信息</a>           <a href="index.jsp">返回首??</a>        </p>        <table border="1" cellspacing="0" width="90%" bgcolor="#F0F8FF" bordercolorlight="#000000" bordercolordark="#FFFFFF" align="center">          <tr>            <td width="12%" align="center">              <strong>ID ??</strong>            </td>            <td width="13%" align="center">              <b>?? 型</b>            </td>            <td width="47%" align="center">              <strong>信 息 名 费</strong>            </td>            <td width="14%" align="center">              <strong>修 改</strong>            </td>            <td width="14%" align="center">              <strong>?h 除</strong>            </td>          </tr>          <% if(counts%pageSizes==0){pageCounts=counts/pageSizes;}else{pageCounts=counts/pageSizes+1;}int i=(intPage-1)*pageSizes;



ps=conn.prepareStatement(query);ResultSet rs1=ps.executeQuery();for( int  j=0; j<i ; j++)rs1.next();out.println(rs+"<BR><BR><BR> ");out.println(rs.next()); i=0;while(rs1.next()&&i<pageSizes){%>          <tr>            <td width="12%" height="7">              <p align="center">                <%= rs1.getString("article_id")%>              </p>            </td>            <td width="13%" height="7">              <div align="center">                <%= rs1.getString("types")%>              </div>            </td>            <td width="47%" height="7">              <%= rs1.getString("title")%>            </td>            <td width="14%" align="center" height="7">              <a href="edit.jsp?id=<%=rs1.getString("article_id")%>">修 改</a>            </td>            <td width="14%" align="center" height="7">              <a href="delete.jsp?id=<%=rs1.getString("article_id")%>">?h 除</a>            </td>          </tr>          <% i++;}%>        </table>        <%



}catch(SQLException se1){se1.printStackTrace();}finally{}



stmt.close(); conn.close(); %>      </td>    </tr>  </table><form action="manage.jsp" method="post" >第<%=intPage%>??,共<%=pageCounts%>??<%if(intPage<pageCounts)%><a href="manage.jsp?strPage=<%=intPage+1%>">下一??</a><%if(intPage>1)%><a href="manage.jsp?strPage=<%=intPage-1%>">上一??</a>



</form>



  <P>&nbsp;</P></body>



</html>





返回类别: 教程
上一教程: JAVA源代码!可以显示水波效果!
下一教程: J2SE 5.0实例---静态引入

您可以阅读与"我终于理解了JSP 的分页了"相关的教程:
· 在JSP页面中实现检索数据的分页显示
· 一个用JSP实现的分页的类及调用方式
· JSP数据库操作例程-数据分页显示-JDBC 2.0-ORACLE
· JSP数据库操作例程 - 数据分页显示
· 具体的JSP分页(ORACLE+JSP+APACHE)
    微笑服务 优质保证 索取样品