因为项目当中用到分页,界面用了jstl,本想用jstl给我分页的,测试代码如下
<%@ taglib uri="
http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="
http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ page contentType="text/html; charset=gbk"%>
<html>
<body>
<c:set value="8" var="ipage"/>
<c:set value="${param.cpage}" var="cpage" scope="request"/>
<c:if test="${empty sessionScope.allCount}">
<sql:query var="rso">select * from test</sql:query>
<c:set value="${rso.rowCount}" var="allCount" scope="session"/>
</c:if>
<sql:query var="rs" startRow="${ipage*(cpage-1)}" maxRows="${ipage}">
select * from test
</sql:query>
<c:set value="${(allCount+ipage-1)/ipage}" var="allpage"/>
<fmt:parseNumber value="${allpage}" integerOnly="true" var="allpage"/>
xxx<c:out value="${allpage}"/><br>
<c:forEach items="${rs.rows}" var="item">
<c:out value="${item.name}"/>
<c:out value="${item.password}"/><br>
</c:forEach>
<c:if test="${cpage<=1}">
<c:set value="${cpage+1}" var="cpage"/>
</c:if>
<c:if test="${cpage>allpage}">
<c:set value="${allpage}" var="cpage"/>
</c:if>
<A href="
http://localhost:8080/jstl/test.jsp?cpage=${cpage-1}">上一页</A>
<A href="
http://localhost:8080/jstl/test.jsp?cpage=${cpage}">当前页</A>
<A href="
http://localhost:8080/jstl/test.jsp?cpage=${cpage+1}">下一页</A>
<hr>
</body>
</html>
本以为这样子比起用oracle里的rownum(如果更换数据库还得改代码),来的要好,因为我这里的是
<sql:query var="rs" startRow="${ipage*(cpage-1)}" maxRows="${ipage}">
select * from test
</sql:query>
可是我看了他的源代码,竟然它利用缓存,每次调用
<sql:query startRow="" maxRows="">它都会把select * from test的数据全部一次性查出得到一个result,再根据startRow,再调用result.next(),startRow次后才正式帮我们工作..
看来还是原始的方式速度要快一些..
.......进化出来的产物不一定先进