先来说说这个分页功能的实现:
以前知道的就是先从数据库中查询出所有的数据. 然后通过几个层的各个设计, 使之分层, 问了问别人,说这种方法不是
太好, 因为这个东西就好像是内存的一个分页似得,全部数据都放在内存当中, 无形中对电脑是一个很大的压力.
加入我们实现数据库中的一个分页呢? 挺好的 , 也就是说 通过在jsp 页面中, 选择了要显示的页面的索引, 然后传给dao层,
让数据库来判断要显示的那部分数据, 并且只把要显示的那部分数据查询出来, 传给jsp 页面 , 这样的话就减轻了电脑的内存
压力, 但是相对来讲有增强了 数据库的压力, 因为这会是一个对数据库进行多次查询的方法.
至于究竟哪种方式好, 还是以后慢慢总结吧!
前几天想要为程序做一个分页代码,去网上搜了下,真的有很多资源。
但是每个都很复杂,看一眼都头大了,更不要说要我去一行一行的理解了,拿出李白曾经给出的demo,看了几眼,也怵头。
一狠心,一咬牙。自己做。
用了N天的时间(实在没有勇气去计算用了几天)来研究分页代码,今天算是弄出来了.
先说说这个sql语句:
"select top 每页要显示数据行数 * from table_name where id not in(select top 每页要显示数据行数(要显示的页面索引-1) id from table_name)"
子查询中, 假设我要查看第二页中的数据, 而且每页的数据行数是5的话 ,那么 就是 5 (2 - 1) .子查询中的语
句就成了 select top 5 id from table_name ,这个就等于查询出 top 5 的数据, 紧接着, 在外面还有一
条语句
select top 5 * from table_name where id not in ( result )
这里就很明朗了, 外边也是要查询 top 5 的数据, 然后他有一个约束条件 , 那就是 where id not in
就是不在查询的结果的范围内的 前5条数据,
你想啊 子查询的结果是表中的前五条数据 , 那不在这个范围的 , 而且还是在 前 5 条数据的 ,
肯定就是 6 ---10 条数据了, 那就是 我们开始选择的 要显示的第二页的数据了.
下面来说一下分页中的其他部分的构思:
我还是从开发的角度来说吧 , 从dao层开始
public ArrayList query(int choosePageIndex) {
lastZxBean lastZx = null ;
ArrayList list = new ArrayList();
int total = 5 * (choosePageIndex - 1 ) ;
String sql = "select top 5 * from lastZx " +
"where Lid not in" +
"(select top "+total+" Lid from lastZx)";
con = connBean.getConnection();
try {
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
lastZx = new lastZxBean();
lastZx.setLid(rs.getInt("Lid"));
lastZx.setRemark(rs.getString("remark"));
list.add(lastZx);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
freeMem();
}
return list;
}
在dao层只需要传入我们要显示的页面的索引, 经过简单的计算 ,然后将结果传入 sql 语句中, 这里的步骤就不多做介绍了.
进入servlet层 , 其实这里也没有多做什么 , 就是 这样的
lastZxBean lastZx = new lastZxBean();
String temp = request.getParameter("page");
Integer temp2 = Integer.valueOf(temp);
int choosePageIndex = temp2.intValue();
List list = lastZx.query(choosePageIndex);
将jsp页面选中的要显示的页面数传递过来 然后经过一些转换, 调用dao层的方法的 传入参数就OK 了.
最后也是最重要的 VIew层 , 也就是 jsp页面那层
看看重要的代码:
function choosePageIndex(){
document.pagination.submit();
}
<form name="pagination" action="PagInationServlet" method="post">
<select name="page" onchange="choosePageIndex()">
<c:forEach items="${requestScope.listPage}" var="page">
<option value="${page }" >${page }</option>
</c:forEach>
</select>
</form>
这部分就是这些, 主要的是那个js , 丫丫的 ,我以前写的是 document.forms[2].submit(); 而且这里的
pagination 表单也就是 jsp页面中的第三个页面, 我提交就是不成功 . 而且改成了 现在这样子
他们就是对我说, forms[2 ] 不一定就是 jsp页面的第三个 form , 至于为什么? 到现在也没有得到一个
解释. 唉 !
回来再说 ,明白了再回来写下来.