分頁查詢的實現原理

1:接着上次寫的圖書管理系統:http://www.cnblogs.com/biehongli/p/6445803.htmljavascript

此次新增了分頁查詢;css


 2:爲何會用到分頁呢,由於列表內容太多了,因此使用分頁進行顯示。html

分頁的核心就是計算每頁多少記錄和總頁數以及第幾頁。java

3:首先先寫如何計算每頁多少記錄和第幾頁,依舊在BookDao.java和BookDaoImpl.java中繼續增長方法
sql

在計算每頁多少記錄和第幾頁的後臺核心代碼以下所示:數據庫

  //第二步書寫sql語句
     String sql="select * from book limit ?,? ";
     ps=con.prepareStatement(sql);//第三步:預編譯
     //第幾頁須要設置好是頁數減一乘以每頁的記錄數便是第多少頁
     ps.setInt(1, (page-1)*record);
     ps.setInt(2, record);
jsp

1 /***
2      * 分頁查詢的方法
3      * @param page 第幾頁
4      * @param record 一頁有多少記錄
5      * @return
6      */
7     public List<Book> bookPage(int page,int record);
 1 @Override
 2     public List<Book> bookPage(int page, int record) {
 3         Connection con=null;
 4         PreparedStatement ps=null;
 5         ResultSet rs=null;
 6         try {
 7             con=BaseDao.getCon();//第一步鏈接數據庫
 8             //第二步書寫sql語句
 9             String sql="select * from book limit ?,? ";
10             ps=con.prepareStatement(sql);//第三步:預編譯
11             //第幾頁須要設置好是頁數減一乘以每頁的記錄數便是第多少頁
12             ps.setInt(1, (page-1)*record);
13             ps.setInt(2, record);
14             
15             //第四步執行sql
16             rs=ps.executeQuery();
17             List<Book> list=new ArrayList<Book>();
18             while(rs.next()){
19                 Book book=new Book();
20                 book.setBookid(rs.getInt("bookid"));
21                 book.setBookname(rs.getString("bookname"));
22                 book.setPrice(rs.getDouble("price"));
23                 book.setAuthor(rs.getString("author"));
24                 book.setPic(rs.getString("pic"));
25                 book.setPublish(rs.getString("publish"));
26                 
27                 list.add(book);
28             }
29             return list;
30         } catch (ClassNotFoundException e) {
31             e.printStackTrace();
32         } catch (SQLException e) {
33             e.printStackTrace();
34         }finally{
35             //關閉資源,避免出現異常
36             BaseDao.close(con, ps, rs);
37         }
38         
39         return null;
40     }

4:首先先寫如何計算總頁數,依舊在BookDao.java和BookDaoImpl.java中繼續增長方法ide

1 /***
2      * 獲取總頁數
3      * @param record
4      * @return
5      */
6     public int getCount(int record);
 1 @Override
 2     public int getCount(int record) {
 3         Connection con=null;
 4         PreparedStatement ps=null;
 5         ResultSet rs=null;
 6         //設置初始值爲-1
 7         int n=-1;
 8         try {
 9             con=BaseDao.getCon();//第一步鏈接數據庫
10             //第二步書寫sql語句
11             String sql="select count(*) from book ";
12             ps=con.prepareStatement(sql);//第三步:預編譯
13             
14             //第四步執行sql
15             rs=ps.executeQuery();
16             if(rs.next()){
17                 //獲取第一條記錄,由於查詢count(1)就一條記錄,獲取便可,即總記錄數
18                 n=rs.getInt(1);
19                 //將總記錄數除以每頁的總記錄數然乎向上取整便可
20                 n=(int)Math.ceil(1.0*n/record);
21             }
22             
23         } catch (ClassNotFoundException e) {
24             e.printStackTrace();
25         } catch (SQLException e) {
26             e.printStackTrace();
27         }finally{
28             //關閉資源,避免出現異常
29             BaseDao.close(con, ps, rs);
30         }
31         
32         return n;
33     }

5:接下來直接在book.jsp進行代碼的開發,完成分頁功能,本頁的都是核心,由於在book.jsp頁面完成了如何操做上一頁,下一頁,跳轉頁數,以及完成了首頁尾頁的控制ui

  1 <%@page import="com.bie.dao.impl.BookDaoImpl"%>
  2 <%@page import="com.bie.dao.BookDao"%>
  3 <%@ page language="java" contentType="text/html; charset=UTF-8"
  4     pageEncoding="UTF-8" %>
  5 <%@ page import="java.util.List" %>
  6 <%@ page import="com.bie.po.Book" %>
  7 <%@ page import="com.bie.service.impl.BookServiceImpl" %>
  8   
  9 <%@ include file="head.jsp" %>  
 10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 11 <html>
 12 <head>
 13 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 14 <title>圖書處理頁面</title>
 15 <style type="text/css">
 16 h1{text-align:center;}
 17 </style>
 18 
 19 <script type="text/javascript">
 20     function clickIt(){
 21         var p2=document.getElementById("t2").value;
 22         location.href="book.jsp?p="+p2;
 23     }
 24 </script>
 25 </head>
 26 <body>
 27 <%-- <%
 28     //第一次使用的方法
 29     Book book=new Book();
 30     BookServiceImpl service=new BookServiceImpl();
 31     List<Book> list=service.select(book);
 32 %> --%>
 33 
 34 <%
 35     Book book=new Book();
 36     BookDao dao=new BookDaoImpl();
 37     //2:獲取從下面上一頁下一頁傳來的參數p
 38     String p2=request.getParameter("p");
 39     
 40     //1:設置好第一頁開始和一頁有五條記錄
 41     int p=1;
 42     int r=5;
 43     //5:獲取到返回的總頁數,將每頁的總記錄數傳進去
 44     int count=dao.getCount(r);
 45     
 46     //3:若是p2不爲null且不爲空,就轉化爲p
 47     if(p2!=null && !p2.equals("")){
 48         p=Integer.parseInt(p2);
 49     }
 50     //4:若是頁數爲負的那麼就賦值爲首頁
 51     if(p<=0){
 52         p=1;
 53     }
 54     
 55     //6:控制後面的頁數,若是大於總頁數,將最後一頁賦值爲尾頁便可
 56     if(p>=count){
 57         p=count;
 58     }
 59     
 60     //7:調用分頁的方法進行分頁操做
 61     List<Book> list=dao.bookPage(p, r);
 62     
 63 %>
 64 <h1>圖書列表</h1>
 65 <a href="javascript: window.history.go(-1)">返回上一級</a>
 66 <table align="center" cellpadding="10" cellspacing="10">
 67     
 68     <tr bgcolor="green">
 69         <td>編號</td>
 70         <td>書名</td>
 71         <td>價格</td>
 72         <td>做者</td>
 73         <td>封皮</td>
 74         <td>出版社</td>
 75     </tr>
 76         <%-- <%
 77             for(Book b:list){
 78         %> --%>
 79         <%
 80             String bg="";
 81             for(int i=0;i<list.size();i++){
 82                 Book b=list.get(i);
 83                 if(i%2==0)
 84                     bg="pink";
 85                 else
 86                     bg="yellow";
 87         %>
 88     <tr bgcolor="<%=bg%>">
 89             <td><%=b.getBookid() %></td>
 90             <td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td>
 91             <td><%=b.getPrice() %></td>
 92             <td><%=b.getAuthor() %></td>
 93             <td><%=b.getPic() %></td>
 94             <td><%=b.getPublish() %></td>
 95     </tr>
 96         <%        
 97             }
 98         %>
 99 </table>
100 <div align="center">
101     第<%=p %>/共<%=count %>102     <a href="book.jsp?p=0">首頁</a>
103     <a href="book.jsp?p=<%=p-1 %>">上一頁</a>
104     <a href="book.jsp?p=<%=p+1 %>">下一頁</a>
105     <a href="book.jsp?p=<%=count%>">尾頁</a>
106     <input type="text" size="2" id="t2">
107     <input type="button" value="go" onclick="clickIt()"/>
108 </div>
109 </body>
110 </html>

演示效果以下所示:spa

還有不少須要完善的,因此先分享一下咯,繼續努力咯!!!

相關文章
相關標籤/搜索