关于servlet与jsp之间实现数据库结果分页显示,帮忙调试

来源:百度知道 编辑:UC知道 时间:2024/05/18 09:06:06
我现在要做个分页显示,servlet将查询的结果rs,想要传给jsp
高手帮忙,我在线等,调试成功的我把分都给你。

servlet部分

ResultSet rs=jb.query(sql);

request.setAttribute("rs",rs);
request.getRequestDispatcher("/browse.jsp").forward(request,response);

}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}

public void init() throws ServletException {

}

}
jsp部分
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*"%>
<%@ page language="java"%>
<%
int PageSize=2;
int ShowPage=1;
int RowCount=0;
int PageCount=0;
ResultSet rs=(ResultSet)request.getAttribute("rs");
rs.last();
RowCount=rs.getRow();
PageCount=((RowCount%PageSize)==0

你们这样分页肯定有问题,如果数据量小还可以,数据量稍微大一点你的程序就完了,你是把表里的数据全都查出来了吧?内存是有限的,像你这样,会把服务器搞垮,好的分页方法是看第几页就去数据库里查第几页,应该在sql语句上下一点功夫。给你写个sql的公式:
select top 每页显示数量 * from 表 where 条件 and 主键 not in ( select top (当前页-1)*每页显示数量 主键 from 表 where 条件 order by 主键 desc) order by 主键 desc

要注意的是这个适用于access和sqlserver,外面的select和里面的select的条件、排序应该保持一致。像这样的话,jsp页面就好写多了。

还有在servlet里最好把rs的内容都存到一个集合里面,然后在jsp里循环集合就可以了,这样在jsp之前就可以关闭rs,和关闭连接,要不然占的资源不可想象。

<%@ page contentType="text/html;charset=gb2312" language="java" import="java.sql.*" %>
<%
String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs";
String pagesql,sql;
ResultSet pagers,rs;
int i;
int ipage=10; //分页单位
int allpage; //总页数
int pages; //接受的页码变量
int cpage=1; //当前页
int allCol=0; //总记录数
int beginpos=0; //每页开始位置
int endpo