數據庫的分頁查詢及java代碼如何實現

首先先明確分頁的目標,是爲了減少一次性讀取數據庫的總量,防止讀取過慢,給瀏覽器更加壓力。

如何分頁呢?我這裏寫一個長點的sql,大家自己看一下,主要是看rownum這個屬性如何使用

String sql="SELECT b.r,b.name,b.grade FROM(

SELECT rownum r,a.name,a.grade FROM(

SELECT TU.name,TG.GRADE FROM T_GRADE tg INNER JOIN t_user tu ON TU.U_ID =TG.U_ID WHERE TG.C_ID =? AND TG.GRADE_TYPE=2) a

WHERE rownum<=?)b

 WHERE r>?";


這是一個三表聯查,查詢到的表作爲字表a表,然後查詢a表的rownum (給一個別名r)和其它屬性,這裏限制rownum只能是<= 或者是<類型,這裏不懂得可以去查詢一下rownum如何使用。  然後這些內容作爲一個b表,必須查詢b表的r這個列(即rownum),然後這裏可以給r加上>限制了  這樣就能求到?<rownum>=? 這個範圍內的值。

然而咱們還需要這三個表聯查的統計count(列名)來作爲查詢到的總量數據。  數據庫準備好了,接下來上java代碼

// 設置頁數
int pageNos;
// 獲取不到頁數或者獲取到的頁數小於1,頁數爲1,否則頁數爲傳遞過來的數據
if (req.getParameter("pageNos") == null
|| Integer.parseInt(req.getParameter("pageNos")) < 1) {
pageNos = 1;
} else {
pageNos = Integer.parseInt(req.getParameter("pageNos"));
}

List<NameAndGrade> list = gradeService.findAllSubGradeByC_id(c_id,pageNos * 5, (pageNos - 1) * 5);
int type = 2;// 提交的狀態
Object[] object = { c_id, type };// 放入obj數組
int i = gradeService.findCountNameAndGrade(object);// 獲取總量統計數
req.setAttribute("pageNos", pageNos);
// 定義總頁數(每頁數據量是5條)
int countPage = PagingHelper.getPageCount(i, 5);
req.setAttribute("pageNos", pageNos);
req.setAttribute("countPage", countPage);

這裏面 藍色字體是固定寫法,剩下就看你service如何寫的了,獲取一個表的內容,有分頁限制,在findAllSubGradeByC_id這個方法中 第二個參數pageNos*5是每頁顯示五條數據,這個是最大記錄數,(pageNos - 1) * 5是最小記錄數,例如第一頁,(pageNos - 1) * 5是從0開始,pageNos*5從5結束,即數據庫查詢出數據1-5

下面是一個獲取統計總量方法,然後寫一個方法獲取總頁數,儲存進入request域中

在頁面中設置頁數

<c:if test="${pageNos>1}">
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=1&c_id=${c_id}">首頁</a>
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${pageNos-1}&c_id=${c_id}">上一頁</a>
</c:if>
<c:if test="${pageNos<countPage}">
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${pageNos+1}&c_id=${c_id}">下一頁</a>
<a
href="${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${countPage}&c_id=${c_id}">末頁</a>
</c:if>

這裏${pageContext.request.contextPath}/teaController?action=seachGradeList&pageNos=${pageNos+1}&c_id=${c_id}這個地址是一個mvc的地址,參數必傳的是pageNos,後面的是我寫的方法中需要的內容,這樣一個分頁查詢就做好了,希望大家可以多多討論




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章