数据库的分页查询及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,后面的是我写的方法中需要的内容,这样一个分页查询就做好了,希望大家可以多多讨论




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