MySQL資料庫+jsp+servlet實現分頁查詢
阿新 • • 發佈:2019-01-02
前一段做的那個jsp+servlet的小專案用到了分頁查詢,今天總結到部落格上面,以後忘記了自己可以看,也分享給大家.
這個專案使用的資料庫是MySQL,在MySQL資料庫中使用
select user_id,username from user limit (pageNo-1)*pageSize,pageSize
就可以達到分段查詢的目的,pageNo是頁碼數,pageSize是每頁的容量,如果pageNo=1,pageSize=5的話,那就是取前五條資料,那第二頁就是取出5-10條資料,依次類推.
在這個專案的util包中加入了一個pageUtil的工具類,這個類主要是封裝每頁顯示的資料,比如pageNo(當前頁碼),pageSize(每頁要顯示的資料條數),totalCount,(總記錄的條數),data(當前頁的資料集合),totalPage(總頁數),這個類中的程式碼如下:
package com.team5.util;
import java.util.List;
import com.team5.hurui.bean.Dope;
/**
* 分頁工具類(封裝每頁需要顯示的資料)
*
* @author
*
*/
public class PageUtil {
// 當前頁頁碼(1,2,3....)
private int pageNo;
// 每頁顯示條數
private int pageSize;
// 總記錄(條數)
private int totalCount;
// 當前頁資料集合
private List data;
// 總頁數
private int totalPage;
/**
* 構造方法,傳遞每頁條數和總記錄數
*
* @param 每頁顯示條數
* @param 總記錄數
*/
public PageUtil(int pageSize, int totalCount) {
this.pageSize = pageSize;
this.totalCount = totalCount;
if (this.totalCount % this .pageSize == 0) {
// 計算總頁數
this.totalPage = this.totalCount / this.pageSize;
} else {
this.totalPage = this.totalCount / this.pageSize + 1;
}
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public int getTotalCount() {
return totalCount;
}
public int getTotalPage() {
return totalPage;
}
}
之後在dao類的實現類中使用prepareStatement的executeQuery()方法查詢出每條資料的屬性值,並將其賦給bean類中寫好的實體類的屬性中,然後將實體類的物件放在一個list中,再將這個list給pageUtil類的data集合.
dao的實現類中有關分頁的程式碼:
//根據頁碼和每頁的容量來得到資料
@Override
public PageUtil getPage(int pageNo, int pageSize) {
Connection conn = DBManager.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
List<User> list = new ArrayList<User>();
PageUtil page = null;
try {
//獲取總資料條數
int totalCount = 0;
ps = conn.prepareStatement("select count(user_id) from user");
rs = ps.executeQuery();
while(rs.next()){
totalCount = rs.getInt(1);
}
ps = conn.prepareStatement("select user_id,username from user limit " + (pageNo-1)*pageSize+","+pageSize);
rs = ps.executeQuery();
while(rs.next()){
User user = new User();
user.setUser_id(rs.getInt(1));
user.setUsername(rs.getString(2));
list.add(user);
}
page = new PageUtil(pageSize, totalCount);
page.setData(list);
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBManager.closeAll(rs, ps, conn);
}
return page;
}
然後在servlet中使用request.getParameter(“pageNo”)來獲取到當前的頁碼數,接下來的程式碼:
//設定每頁顯示十條資料
PageUtil page = usi.getPage(pageNo, 10);
page.setPageNo(pageNo);
request.setAttribute("page", page);
request.getRequestDispatcher("admin/showUserList.jsp").forward(request, response);
設定每頁顯示的資料條數,然後page物件傳遞給jsp,在jsp中使用foreach迴圈:
<c:forEach var="list" items="${page.data}">
<tr>
<td align="center" class="altbg2"><input name="item" type="checkbox" id="item" value="${list.user_id}" ></td>
<td align="center" class="altbg2">
${list.username}
</td>
<td class="altbg2" align="center">
${list.user_id}
</td>
<td class="altbg2" align="center">
</td>
</tr>
</c:forEach>
<tr><td class="altbg2" colspan="7" rowspan="2" align="right">
總共【${page.totalPage}】頁 ${page.pageNo}/${page.totalPage} <a href="zcUserServlet?method=showPage&pageNo=1">首頁</a> <c:choose>
<c:when test="${requestScope.page.pageNo > 1}">
<a href="zcUserServlet?method=showPage&pageNo=${page.pageNo-1}">上一頁</a>
</c:when>
<c:otherwise>
上一頁
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${page.pageNo < page.totalPage}">
<a href="zcUserServlet?method=showPage&pageNo=${page.pageNo+1}">下一頁</a>
</c:when>
<c:otherwise>
下一頁
</c:otherwise>
</c:choose>
<a href="zcUserServlet?method=showPage&pageNo=${page.totalPage}">尾頁</a> </td>
</tr>
這樣把page物件傳遞過來之後就可以呼叫pageUtil類中的屬性了.這樣分頁基本就做完了,當然,如果想做的更好看點,還可以使用pagination之類的外掛.