关于servlet与jsp之间实现数据库结果分页显示,帮忙调试
我现在要做个分页显示,servlet将查询的结果rs,想要传给jsp高手帮忙,我在线等,调试成功的我把分都给你。servlet部分ResultSetrs=jb.query...
我现在要做个分页显示,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?(RowCount/PageSize):(RowCount/PageSize)+1);
%>
<html>
<head>
</head>
<body>
<%
String ToPage=request.getParameter("ToPage");
if(ToPage!=null)
{
ShowPage=Integer.parseInt(ToPage);
if(ShowPage>PageCount)
{
ShowPage=PageCount;
}
else if(ShowPage<=0)
{
ShowPage=1;
}
}
rs.absolute((ShowPage-1)*PageSize+1);
%>
<h3>当前在第<font size=4 color=red>
<%=PageCount%></font>页</h3>
<br>
<table border="1" width="100%">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<%
int i=0;
while(rs.next()){
i++;
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
<td><%=rs.getString(4)%></td>
</tr>
<%
if(i==PageSize)
{break;}
%>
<%
}
rs.close();
%>
</table>
<table>
<tr valign=baseline align=center>
<%
if(ShowPage!=1)
{
%>
<td width=150>
<a href brower.jsp?ToPage<%=1%>>到第一页</a>
</td>
<td width=150>
<a href=browse.jsp?ToPage=<%=ShowPage-1%>>到上一页</a>
</td>
<%
}
%>
<td width=150>
<form action=browse.jsp method=post>
到
<input type="text" name=ToPage style="height:25px;width:40px" value=<+ShowPage>>页
</form></td></tr>
</table>
</body>
</html>
本来想把全部代码放上,可是有要求3000以下,放不下了,查询数据库部分得出的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?(RowCount/PageSize):(RowCount/PageSize)+1);
%>
<html>
<head>
</head>
<body>
<%
String ToPage=request.getParameter("ToPage");
if(ToPage!=null)
{
ShowPage=Integer.parseInt(ToPage);
if(ShowPage>PageCount)
{
ShowPage=PageCount;
}
else if(ShowPage<=0)
{
ShowPage=1;
}
}
rs.absolute((ShowPage-1)*PageSize+1);
%>
<h3>当前在第<font size=4 color=red>
<%=PageCount%></font>页</h3>
<br>
<table border="1" width="100%">
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<%
int i=0;
while(rs.next()){
i++;
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
<td><%=rs.getString(4)%></td>
</tr>
<%
if(i==PageSize)
{break;}
%>
<%
}
rs.close();
%>
</table>
<table>
<tr valign=baseline align=center>
<%
if(ShowPage!=1)
{
%>
<td width=150>
<a href brower.jsp?ToPage<%=1%>>到第一页</a>
</td>
<td width=150>
<a href=browse.jsp?ToPage=<%=ShowPage-1%>>到上一页</a>
</td>
<%
}
%>
<td width=150>
<form action=browse.jsp method=post>
到
<input type="text" name=ToPage style="height:25px;width:40px" value=<+ShowPage>>页
</form></td></tr>
</table>
</body>
</html>
本来想把全部代码放上,可是有要求3000以下,放不下了,查询数据库部分得出的rs肯定没什么问题,主要下面的jsp怎么改一下? 展开
展开全部
你们这样分页肯定有问题,如果数据量小还可以,数据量稍微大一点你的程序就完了,你是把表里的数据全都查出来了吧?内存是有限的,像你这样,会把服务器搞垮,好的分页方法是看第几页就去数据库里查第几页,应该在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,和关闭连接,要不然占的资源不可想象。
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 endpos=0; //每页的结束位置
//注册驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection sqlCon = DriverManager.getConnection(url,"sa","sa");
Statement sqlStmt =sqlCon.createStatement();
//取总记录数
pagesql = "select count(*) as count from employee";
pagers = sqlStmt.executeQuery(pagesql);
if(pagers.next())
{
allCol = pagers.getInt("count");
}
//获得总页面数
allpage = (allCol+ipage-1)/ipage;
//判断参数pages是否为空
if (request.getParameter("pages")==null)
{
pages=1;
beginpos=0;
endpos=ipage;
}
else
{
pages = new Integer(request.getParameter("pages")).intValue();
}
//判断当前页
if(pages > allpage || pages <1)
{
cpage = 1; //-默认当前要显示的页码
beginpos=0; //-=默认记录开始的位置为0
endpos=ipage; //--默认结束位置为第一页的结尾
}
else
{
cpage = pages; //--当前要显示的页码
beginpos=pages*ipage-ipage; //--得到记录开始的位置
endpos=pages*ipage; //--得到记录结束的位置
}
sql = "select * from employee order by emp_id";
rs= sqlStmt.executeQuery(sql); //--得到要分页的结果集
for(i=0;i<beginpos;i++)
{
rs.next(); //--把结果集的记录数移到要显示的页的记录的开始位置
}
%>
<TABLE align=center bgColor=#000000 border=0 borderColor=#000000 cellSpacing=0 width="750">
<TR>
<TD>
<TABLE border=0 cellPadding=2 cellSpacing=1 width="100%">
<TR bgColor=#d14f00>
<TD align=middle width=50><B><FONT color=#ffffff>序号</FONT></B></TD>
<TD align=middle width=82><B><FONT color=#ffffff>姓</FONT></B></TD>
<TD align=middle width=200><B><FONT color=#ffffff>地址</FONT></B></TD>
<TD align=middle ><B><FONT color=#ffffff>名</FONT></B></TD>
</TR>
<%
for(int j=beginpos;j<endpos;j++) //---从开始位置读取记录一直到结束位置
{
if(rs.next())
{
String emp_id=new String(rs.getString("emp_id").getBytes("8859_1"),"gb2312");
String fname=new String(rs.getString("fname").getBytes("8859_1"),"gb2312");
String minit=new String(rs.getString("minit").getBytes("8859_1"),"gb2312");
String lname=new String(rs.getString("lname").getBytes("8859_1"),"gb2312");
%>
<TR bgColor=#eeeeee>
<TD width=82><%=emp_id%></TD>
<TD align=middle width=90 ><%=fname%></TD>
<TD align=middle width=150><%=minit%></TD>
<TD align=middle width=150><%=lname%></TD>
</TR>
<%
}
else break;
}
%>
</table>
</TD>
</TR>
</TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="750">
<TR>
<TD>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="750">
<TR bgColor=#d14f00>
<TD align=center>
<FONT color=#ffffff>
总计:<%= allCol %>条记录 |每页:<%=ipage%>条| 共 <%= allpage %>页 |
当前页为:<%=cpage%>/<%=allpage%> |
<% if (cpage>1)
{ %><a href="fy.jsp?pages=1"><FONT color=blue>第一页</a> |
<a href="fy.jsp?pages=<%= cpage-1 %>"><FONT color=blue>上一页 |</a>
<% }
if (cpage<allpage)
{ %><a href="fy.jsp?pages=<%= cpage+1 %>"><FONT color=blue>下一页</a> |
<a href="fy.jsp?pages=<%=allpage%>"><FONT color=blue>结尾页</a>
<% } %>
</FONT>
</TD>
</tr>
<tr bgColor=#d14f00 align=right>
<td ><form name=form1 method=post action=fy.jsp>
转到: <select name="pages" size="1">
<%
for(int m=0;m<allpage;m++)
{
%>
<option value="<%=m+1%>">第<%=m+1%>页</option>
<%
}
%>
</select>
<input name="B1" type="submit" tabindex="1" WIDTH="70" HEIGHT="20" value="跳 转" >
</td>
</TR>
</TABLE></form>
</TD>
</TR>
</TABLE>
</html>
标准JSP分页
明白你的意思.我也不用这种分页,SQL语句的优化也是Hibernate处理的,在这里我只是把分页的思路发出来,你不是也想看JSP么???
<%
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 endpos=0; //每页的结束位置
//注册驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection sqlCon = DriverManager.getConnection(url,"sa","sa");
Statement sqlStmt =sqlCon.createStatement();
//取总记录数
pagesql = "select count(*) as count from employee";
pagers = sqlStmt.executeQuery(pagesql);
if(pagers.next())
{
allCol = pagers.getInt("count");
}
//获得总页面数
allpage = (allCol+ipage-1)/ipage;
//判断参数pages是否为空
if (request.getParameter("pages")==null)
{
pages=1;
beginpos=0;
endpos=ipage;
}
else
{
pages = new Integer(request.getParameter("pages")).intValue();
}
//判断当前页
if(pages > allpage || pages <1)
{
cpage = 1; //-默认当前要显示的页码
beginpos=0; //-=默认记录开始的位置为0
endpos=ipage; //--默认结束位置为第一页的结尾
}
else
{
cpage = pages; //--当前要显示的页码
beginpos=pages*ipage-ipage; //--得到记录开始的位置
endpos=pages*ipage; //--得到记录结束的位置
}
sql = "select * from employee order by emp_id";
rs= sqlStmt.executeQuery(sql); //--得到要分页的结果集
for(i=0;i<beginpos;i++)
{
rs.next(); //--把结果集的记录数移到要显示的页的记录的开始位置
}
%>
<TABLE align=center bgColor=#000000 border=0 borderColor=#000000 cellSpacing=0 width="750">
<TR>
<TD>
<TABLE border=0 cellPadding=2 cellSpacing=1 width="100%">
<TR bgColor=#d14f00>
<TD align=middle width=50><B><FONT color=#ffffff>序号</FONT></B></TD>
<TD align=middle width=82><B><FONT color=#ffffff>姓</FONT></B></TD>
<TD align=middle width=200><B><FONT color=#ffffff>地址</FONT></B></TD>
<TD align=middle ><B><FONT color=#ffffff>名</FONT></B></TD>
</TR>
<%
for(int j=beginpos;j<endpos;j++) //---从开始位置读取记录一直到结束位置
{
if(rs.next())
{
String emp_id=new String(rs.getString("emp_id").getBytes("8859_1"),"gb2312");
String fname=new String(rs.getString("fname").getBytes("8859_1"),"gb2312");
String minit=new String(rs.getString("minit").getBytes("8859_1"),"gb2312");
String lname=new String(rs.getString("lname").getBytes("8859_1"),"gb2312");
%>
<TR bgColor=#eeeeee>
<TD width=82><%=emp_id%></TD>
<TD align=middle width=90 ><%=fname%></TD>
<TD align=middle width=150><%=minit%></TD>
<TD align=middle width=150><%=lname%></TD>
</TR>
<%
}
else break;
}
%>
</table>
</TD>
</TR>
</TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="750">
<TR>
<TD>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="750">
<TR bgColor=#d14f00>
<TD align=center>
<FONT color=#ffffff>
总计:<%= allCol %>条记录 |每页:<%=ipage%>条| 共 <%= allpage %>页 |
当前页为:<%=cpage%>/<%=allpage%> |
<% if (cpage>1)
{ %><a href="fy.jsp?pages=1"><FONT color=blue>第一页</a> |
<a href="fy.jsp?pages=<%= cpage-1 %>"><FONT color=blue>上一页 |</a>
<% }
if (cpage<allpage)
{ %><a href="fy.jsp?pages=<%= cpage+1 %>"><FONT color=blue>下一页</a> |
<a href="fy.jsp?pages=<%=allpage%>"><FONT color=blue>结尾页</a>
<% } %>
</FONT>
</TD>
</tr>
<tr bgColor=#d14f00 align=right>
<td ><form name=form1 method=post action=fy.jsp>
转到: <select name="pages" size="1">
<%
for(int m=0;m<allpage;m++)
{
%>
<option value="<%=m+1%>">第<%=m+1%>页</option>
<%
}
%>
</select>
<input name="B1" type="submit" tabindex="1" WIDTH="70" HEIGHT="20" value="跳 转" >
</td>
</TR>
</TABLE></form>
</TD>
</TR>
</TABLE>
</html>
标准JSP分页
明白你的意思.我也不用这种分页,SQL语句的优化也是Hibernate处理的,在这里我只是把分页的思路发出来,你不是也想看JSP么???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询