Mysql和Oracle數據庫中的分頁查詢 方法一:mysql數據庫分頁 <% //定義每一頁顯示的記錄 int pageSize = 3; String strPageNo = request.getParameter("pageNo"); //記錄當前頁面 int pageNo; //如果傳入的當前頁碼為空,停留在第一頁 if(strPageNo == null || strPageNo.equals("")) { pageNo = 1; } else { try //把傳進來的字符串轉化成數字 { pageNo = Integer.parseInt(strPageNo.trim()); } catch(NumberFormatException e) { pageNo = 1; } //如果頁碼小於或者等於0停留在第一頁 if(pageNo<=0) { pageNo=1; } } //連接數據庫 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection ("jdbc:mysql://localhost/bbs?user=root&password=mingming"); Statement stCount = conn.createStatement(); ResultSet rsCount = stCount.executeQuery ("select count(*) from article where pid=0");//查詢共有多少個根節點 rsCount.next(); int totalRecord = rsCount.getInt(1); //拿到所有的子節點,計算出總共有多少條記錄 // 第一種方法 計算得到總的頁數,如果能被整數,頁數就是商,否則就是商+1 int totalPage = totalRecord%pageSize==0 ? totalRecord/pageSize : totalRecord/pageSize +1; //第二種方法 計算得到總的頁數,在 總記錄上+加一個pageSize然後減去1除頁面的大小pageSize,取商 int totalRecords = rsCount.getInt(1); totalPages = (totalRecords + PAGE_SIZE - 1)/PAGE_SIZE; //如果當前頁碼大於總的頁數,停在最後一頁 if(pageNo>totalPage) { pageNo = totalPage; } //計算每一次分頁時 的起始位置,注意起始是從0開始; int startPos = (pageNo-1)*pageSize; Statement st = conn.createStatement(); //進行分頁查詢,startPos是每一次分頁的起始位置; pageSize是這一頁要顯示記錄的大小 ResultSet rs = st.executeQuery ("select * from article where pid =0 order by pdate desc limit "+startPos+","+pageSize); %> 分頁後在頁面的不同的顯示方式: 方式一:在一個table中正常的顯示: <table border="1"> <% while(rs.next()){ %> <tr> <td> <%= rs.getString("title") %>//只顯示每一個記錄的title </td> </tr> <% } //關閉流 rs.close(); st.close(); conn.close(); %> </table> 首頁<%=1 %> 共<%=totalPage %>頁 第<%=pageNo %>頁 末頁<%=totalPage %> <a href="ShowArticleFlat.jsp?pageNo=<%=pageNo-1 %>"> 上一頁 </a> <a href="ShowArticleFlat.jsp?pageNo=<%=pageNo+1 %>"> 下一頁 </a> 方式二:可以選擇的顯示:可以實現頁面的跳轉 <form name="form1"> <select name="pageNo" onchange="document.form1.submit()"> <% for(int i = 1;i<=totalPage;i++){ %> <option value=<%=i %> <%= pageNo==i?"selected":""%>>第<%=i %>頁 <% } %> </select> </form> 方式三:可以直接進行頁面的查找: //提交到當前頁面 <form name="fom2" action="ShowArticleFlat.jsp"> <input type=text size=4 name="pageNo" value=<%=pageNo%> /> <input type="submit" value="go" /> </form> 方法二:Oracle數據庫下的分頁操作 <body> <h2>分頁查詢</h2> <table> <tr> <td>姓名</td> <td>薪水</td> </tr> <% //連接數據庫,加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection ct = DriverManager.getConnection ("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","scott","tiger"); Statement sm = ct.createStatement(); //總共有多少頁 int pageCount = 0; //總共有多少行記錄 int rowCount = 0; //每頁有3行記錄 int pageSize = 3; //接收pageNow String s_pageNow = (String)request.getParameter("pageNow"); //當前在第一頁 int pageNow = 1; if(s_pageNow != null) { //把s_pageNow轉化為數值型 pageNow = Integer.parseInt(s_pageNow); } //查詢表中共有多少條記錄 ResultSet rs = sm.executeQuery("select count(*) from emp"); if(rs.next()) { rowCount = rs.getInt(1); //如果整除就是商,否則就是商加上1 可以用三元表達式代替 rowCount%pageSize==0 ? rowCount/pageSize : rowCount/pageSize +1 if(rowCount%pageSize == 0) { pageCount = rowCount/pageSize; } else { pageCount = rowCount/pageSize +1; } } //執行分頁查詢 rs = sm.executeQuery ("select * from (select a1.*,rownum rn from(select * from emp) a1 where rownum<="+pageNow*pageSize+")where rn>="+((pageNow-1)*pageSize+1)+" "); while(rs.next()) { out.println("<tr>"); out.println("<td>"+rs.getString(2)+"</td>"); out.println("<td>"+rs.getString(6)+"</td>"); out.println("</tr>"); } //輸出每一頁要查找的連接 for(int i=1; i<=pageCount; i++) { out.print("<a href=fenye.jsp?pageNow="+i+">["+i+"]<a>"); } %> </table> </body>