我終於理解了JSP 的分頁了

來源:互聯網
上載者:User
js|分頁
我們查詢資料庫的時候,如果查詢出來的結果是很多條,比如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> </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> </P></body>



</html>



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。