我终于理解了JSP 的分页了

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

 

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

查询出有多少条记录:

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;}
else
intPage=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>刪 除</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")%>">刪 除</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>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值