1,分頁的原理:javascript
一般咱們從數據庫取得的數據較多時不會所有展示出來,須要用到分頁。css
2,怎麼取到咱們所須要的數據呢?html
*處理分頁請求的Servlet或者jspjava
*請求要顯示頁面的頁碼mysql
*每頁顯示的信息數jquery
*總頁數sql
3,分頁分爲兩大類:數據庫
*內存分頁:一次將全部的頁面查詢出來,而後根據頁面的請求顯示指定的記錄數。設計模式
*sql分頁:根據頁面的請求一次只從數據庫中讀取一頁的結果,而後在頁面顯示該頁。(select *from table limit 開始位置,結束位置)session
下面開始進行分頁實戰:
1,首先咱們建立一個page封裝類,
1 package cn.com.yong.Pojo; 2 3 import java.util.List; 4 5 public class Page { 6 private int count;//總條數 7 private List<Announcement> evCount;//顯示的數據 8 private int pageSize=6;//每頁的條數 9 @SuppressWarnings("unused") 10 private int pageCount;//總頁數 11 private int pageNow;//當前頁 12 public Page(){} 13 public Page(int count, List<Announcement> evCount, int pageSize, 14 int pageCount, int pageNow) { 15 this.count = count; 16 this.evCount = evCount; 17 this.pageSize = pageSize; 18 this.pageCount = pageCount; 19 this.pageNow = pageNow; 20 } 21 public int getCount() { 22 return count; 23 } 24 public void setCount(int count) { 25 this.count = count; 26 } 27 public List<Announcement> getEvCount() { 28 return evCount; 29 } 30 public void setEvCount(List<Announcement> evCount) { 31 this.evCount = evCount; 32 } 33 public int getPageSize() { 34 return pageSize; 35 } 36 37 public int getPageCount() { 38 int i=0; 39 if(getCount()%getPageSize()==0){ 40 i=getCount()/getPageSize(); 41 }else{ 42 i=getCount()/getPageSize()+1; 43 } 44 return i; 45 } 46 public void setPageCount(int pageCount) { 47 this.pageCount = pageCount; 48 } 49 public int getPageNow() { 50 return pageNow; 51 } 52 public void setPageNow(int pageNow) { 53 this.pageNow = pageNow; 54 } 55 56 57 }
2.咱們寫一個接口,加上咱們須要實現的方法
1 public interface AnnouncementDao { 2 3 public Page getListPage(Page page); 4 5 }
3.實現接口
1 public class AnnouncementDaoImplement implements AnnouncementDao{ 2 public Page getListPage(Page page) { 3 int coun=0;
//建立list對象,用來存儲查詢到的數據庫數據 4 List<Announcement> list=new ArrayList<Announcement>();
//與數據庫創建聯繫(經過單列設計模式實現,文章最後會附上) 5 con=DBConnection.getDBConnectionInstance().getDBConnection();
//查詢總記錄數 6 String sql="select count(*) from announcement";
//按照要求查詢須要的記錄 兩個問號分別表明起始位置和結束位置 7 String sql2="select id,title,context from announcement limit ?,?"; 8 try { 9 ps=con.prepareStatement(sql2);
//下標從零開始,須要-1 10 ps.setInt(1, (page.getPageNow()-1)*page.getPageSize()); 11 ps.setInt(2, page.getPageSize()); 12 ResultSet rs2=ps.executeQuery(); 13 while(rs2.next()){ 14 Announcement an=new Announcement(); 15 an.setId(rs2.getInt(1)); 16 an.setTitle(rs2.getString(2)); 17 an.setContext(rs2.getString(3));
//把查詢到的數據添加到list集合裏 18 list.add(an); 19 } 20 rs=con.createStatement().executeQuery(sql); 21 if(rs.next()){ 22 coun=rs.getInt(1); 23 24 }
//把獲得的list集合設置給page的成員變量EvCount 25 page.setEvCount(list);
//查詢到的總記錄數附給count 26 page.setCount(coun); 27 28 } catch (SQLException e) { 29 e.printStackTrace(); 30 } 31 return page; 32 33 } 34 35 }
4,建立一個Servlet
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import cn.com.yong.DaoImplement.AnnouncementDaoImplement; import cn.com.yong.Pojo.Page; @WebServlet("/AnnouncementFindAllServlet") public class AnnouncementFindAllServlet extends HttpServlet { private static final long serialVersionUID = 1L; Page page=null; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //建立一個session對象 HttpSession session=request.getSession();
//獲取實現類中的參數page,獲得裏面的數據 page=(Page)session.getAttribute("page"); if(page==null){ page=new Page(); } int pageNow=0;
//獲取當前頁的屬性 String str=request.getParameter("pageNow"); if(str==null){ pageNow=1; }else{ pageNow=Integer.parseInt(str); }
//把當前頁獲得的數值賦給page類中的pagenow變量 page.setPageNow(pageNow); AnnouncementDaoImplement adi=new AnnouncementDaoImplement(); //調用方法 page=adi.getListPage(page);
// 爲page設置屬性讓jsp頁面可以接受這個屬性 session.setAttribute("page", page); response.sendRedirect("AnnouncementSelectAll.jsp"); } }
5,jsp頁面
1 <% 2 String path = request.getContextPath(); 3 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 4 Page pa=(Page)session.getAttribute("page"); 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'AnnouncementDao.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <script src="jquery-1.6.4.min.js" type="text/javascript"></script> 20 <script type="text/javascript"> 21 $(document).ready(function demo(){ 22 23 $("th").css({ color: "black", background: "#DDDDDD" }); 24 25 26 }); 27 function getFirstPage(p){ 28 if(p==1){ 29 alert("你已經在首頁了") 30 }else{ 31 window.location.href="AnnouncementFindAllServlet?pageNow=1"; 32 } 33 } 34 function getLastPage(p){ 35 var last=<%=pa.getPageCount()%>; 36 if(p==last){ 37 alert("你已經在尾頁了"); 38 }else{ 39 window.location.href="AnnouncementFindAllServlet?pageNow="+last; 40 } 41 } 42 function getPageUp(p){ 43 if(p==1){ 44 alert("你已經在首頁了"); 45 }else{ 46 window.location.href="AnnouncementFindAllServlet?pageNow="+(p-1); 47 } 48 } 49 function getPageDn(p){ 50 var last=<%=pa.getPageCount()%>; 51 if(p==last){ 52 alert("你已經在尾頁了"); 53 }else{ 54 window.location.href="AnnouncementFindAllServlet?pageNow="+(p+1); 55 } 56 } 57 function getJumpPage(pn){ 58 var changePage = document.getElementById("jumpPage").value; 59 if(changePage ==-1){ 60 alert("請選擇你要跳轉的頁面"); 61 }else if(changePage==pn){ 62 alert("您已經在該頁"); 63 }else{ 64 window.location.href="AnnouncementFindAllServlet?pageNow="+changePage; 65 } 66 } 67 </script> 68 </head> 69 70 <body> 71 <p id="one" style="font-weight: bold;">公告管理</p> 72 <p style="color: red;">____________________________________________________________________________________________________</p> 73 <table align="center" width="100%" border="1" cellpadding="1" cellspacing="1" style="border-collapse: collapse;"> 74 <tr> 75 <th>公告編號</th> 76 <th>公告標題</th> 77 <th>操做</th> 78 </tr> 79 <% 80 81 for(Announcement an:pa.getEvCount()){ 82 83 %> 84 85 86 <tr align="center"> 87 <td><%=an.getId()%></td> 88 <td><%=an.getTitle()%></td> 89 <td><a href="AnnouncementDelServlet?id=<%=an.getId()%>">刪除</a>|| 90 <a href="AnnouncementUpdateServlet?id=<%=an.getId()%>">修改</a></td> 91 92 </tr> 93 94 <%} %> 95 </table> 96 <p>共<%=pa.getPageCount()%>頁,當前第<%=pa.getPageNow()%>頁 97 <span id="firstPage" onclick="getFirstPage(<%=pa.getPageNow()%>)">首頁</span> 98 <span id="pageUp" onclick="getPageUp(<%=pa.getPageNow()%>)">上一頁</span> 99 <span id="pageDn" onclick="getPageDn(<%=pa.getPageNow()%>)">下一頁</span> 100 <span id="lastPage" onclick="getLastPage(<%=pa.getPageNow()%>)">尾頁</span> 101 <span> 102 <span>跳轉到 103 <select id="jumpPage" onchange="getJumpPage(<%=pa.getPageNow() %>)"> 104 <option value="-1">--請選擇--</option> 105 <% 106 for(int i=1;i<=pa.getPageCount();i++){ 107 %> 108 <option value="<%=i%>"><%=i%></option> 109 <% }%> 110 </select> 111 頁</span> 112 </span> 113 </p> 114 </body> 115 </html>
附:jdbc單例
public class DBConnection { private String url="jdbc:mysql://localhost:3306/ei"; private String user="root"; private String password="666888"; private Connection con=null; //構造方法私有化 private DBConnection(){ try { Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } //建立一個私有化對象 private static DBConnection jdbc=new DBConnection(); //實例 public static DBConnection getDBConnectionInstance(){ return jdbc; } public Connection getDBConnection() { return con; } }