查询结果的分页显示望大家指点。
我做了一个分页显示的页面,在不做查询时很好,查询结果不超过一页时也行,可是当查询结果超过一页时就不行了。为什么会这样我知道可是我不知道怎么解决。我用request.setAttribute()绑定了一个参数用来判断出现空指针,我用问号想把SQL语句传过去结果传过去的是NULL。我想请教大家这种情况一般怎么处理,request.setAttribute()能不能在一个页面(我的查询处理是用一个页面)中传递参数呢?请各路英雄不吝赐教,多谢! 问题点数:20、回复次数:8Top
1 楼advanced(超越)回复于 2002-08-01 10:08:54 得分 20
把查询的结果集放到session中,在叶面之间传递就行了。Top
2 楼zl_xue(缺点)回复于 2002-08-01 10:24:01 得分 0
搂主,请问你可不可以吧但也查询的代码给出来?我好分析分析。下面十分页初始化的代码:
<%
String getPage = request.getParameter("pageId").trim();
if(getPage.compareTo("-1")==0)
{
Page myPage=new Page();
String Q_id=request.getParameter("Q_id").trim();
String Q_title=request.getParameter("Q_title").trim();
String Q_idselect="";
String Q_titleselect="";
//if(Q_id.compareTo("")!=0)
//Q_idselect="Q_id like '%"+Q_id+"%'";
//if(Q_title.compareTo("")!=0)
//Q_titleselect="Q_title like '%"+Q_title+"%'";
//Q_idselect=new String();
//if(Q_id.compareTo("")!=0&&Q_title.compareTo("")!=0) Q_idselect=" and"+Q_idselect;
String sql="select Q_id,Q_titlefrom question1 where";
sql=sql+Q_idselect+Q_titleselect+"order by Q_id desc";
session.putValue("Q_idselect",Q_idselect);
session.putValue("Q_titleselect",Q_titleselect);
ResultSet rs=db.executeQuery(sql);
myPage.recordCount=0;
myPage.pageSize=10;
myPage.pageCount=0;
myPage.pageId=1;
Vector idList=new Vector();
getPage="1";
while(rs.next())
{
myPage.recordCount++;
if(myPage.recordCount==myPage.pageSize)
{
myPage.pageCount++;
idList.addElement(rs.getString("Q_id"));
myPage.recordCount=0;
}
}
if(myPage.recordCount!=0)myPage.pageCount++;
myPage.recordCount+=(myPage.pageCount-1)*myPage.pageSize;
rs.close();
session.putValue("idList",idList);
session.putValue("myPage",myPage);
}
%>Top
3 楼xujinglei((表情很漠然,处事很泰然))回复于 2002-08-01 10:36:05 得分 0
妈的,竟然说什么太长让我分开回复,只好如此了,先贴一段出来。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page language="java" import="java.sql.*"%>
<jsp:useBean id="connection" class="testproject.adminBean"/>
<%
if(((String)session.getAttribute("pass")).compareTo("pass")==0)
{
%>
<%!
public String getStr(String str)
{
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e)
{
System.err.println(e.getMessage());
}
return "null";
}
%>
<%
ResultSet sqlRst; //结果集对象
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
String strPage;
intPageSize = 15;//设置一页显示的记录数
strPage = request.getParameter("page");//取得待显示页码
if(strPage==null)//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
else//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
//显示数据
String userno = null;
String name = null;
String gender = null;
String birthday = null;
String email = null;
String phone = null;
String marry = null;
String postcode = null;
String educ = null;
String area = null;
String regdate = null;
String userstatus = null;
String w_memty_id = null;
userno=request.getParameter("userno");userno=getStr(userno);
name=request.getParameter("name");name=getStr(name);
userstatus=request.getParameter("userstatus");userstatus=getStr(userstatus);
if(name==null)
name="姓名";
//out.println(name);
if(userno==null)
userno="代码";
//out.println(userno);
if(userstatus==null)
userstatus="状态";
//out.println(userstatus);
String strSQL = null;
//准备SQL语句
if(intPage==1){
if((userno.compareTo("")==0)&&(name.compareTo("")==0))
strSQL = "SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where userstatus='"+userstatus+"' ORDER BY ID ASC";
if ((userno.compareTo("")==0)&&(userstatus.compareTo("")==0))
strSQL="SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where name='"+name+"' ORDER BY ID ASC";
if((name.compareTo("")==0)&&(userstatus.compareTo("")==0))
strSQL="SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where userno='"+userno+"' ORDER BY ID ASC";
if((name.compareTo("")!=0)&&(userno.compareTo("")!=0)&&(userstatus.compareTo("")==0))
strSQL="SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where name='"+name+"' and userno='"+userno+"' ORDER BY ID ASC";
if((name.compareTo("")!=0)&&(userstatus.compareTo("")!=0)&&(userno.compareTo("")==0)){
strSQL="SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where name='"+name+"' and userstatus='"+userstatus+"' ORDER BY ID ASC";}
if((userno.compareTo("")!=0)&&(userstatus.compareTo("")!=0)&&(name.compareTo("")!=0))
strSQL="SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where userno='"+userno+"' and userstatus='"+userstatus+"' ORDER BY ID ASC";
if(name.compareTo("")!=0&&userno.compareTo("")!=0&&userstatus.compareTo("")!=0)
strSQL="SELECT userno,name,gender,to_char(birthday,'yyyy-mm-dd') as birthday,email,phone,marry,postcode,educ,area,to_char(regdate,'yyyy-mm-dd hh24-mi-ss') as regdate, userstatus,w_memty_id FROM w_member where name='"+name+"' and userno='"+userno+"' and userstatus='"+userstatus+"' ORDER BY ID ASC";
request.setAttribute("strSQL",strSQL);
//out.println((String)request.getAttribute("strSQL"));
}
else{
strSQL=(String)request.getAttribute("strSQL");out.println(strSQL);
}
//执行SQL语句并获取结果集
sqlRst = connection.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//计算总页数
if ((intRowCount % intPageSize)==0)
intPageCount = (intRowCount / intPageSize);//(intRowCount+intPageSize-1) / intPageSize;
else
intPageCount = (intRowCount / intPageSize)+1;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
%>
Top
4 楼xujinglei((表情很漠然,处事很泰然))回复于 2002-08-01 10:37:27 得分 0
各位仁兄后面一段在此。
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<link rel="stylesheet" href="../public/style.css" type="text/css">
<TITLE>会员管理</TITLE>
</HEAD>
<script language="JavaScript">
function SelectAll(){
var max=form.checker.length;
for(var i=0;i<max;i++){
form.checker[i].checked=true;
}
}
function SelectReverse(){
var max=form.checker.length;
for(var i=0;i<=max;i++){
form.checker[i].checked=!(form.checker[i].checked);
}
}
function query(){
var i;
if((form.name.value=="")&&(form.userno.value=="")&&(form.userstatus.value==""))
i=0;
else
i=1;
if(i==0)
alert("请输入查询条件!");
else
form.submit();
}
function CallDel(){
var max=form.checker.length;
var temp,i,mul=0,j=0;
for(i=0;i<max;i++){
if(form.checker[i].checked==true){
if(mul==0)
{temp="'"+form.checker[i].value+"'";mul++;}
else
temp=temp+","+"'"+form.checker[i].value+"'";
j=j+1;
}
}
// document.write(j);
if(j==0)
alert("请选择删除对象");
else
window.location.href="dealdel.jsp?userno="+temp;
}
</script>
<BODY>
<SCRIPT language="JavaScript" src="../public/admintop.js"></SCRIPT>
<BR>
<FORM METHOD=POST name="form" ACTION="queryresult.jsp" >
<TABLE align="center" border=0 width=778 align=center cellspacing="0" cellpadding="0">
<TR>
<TD ALIGN="left" WIDTH=20%>
<A href="javascript:SelectAll()">全选</A>
<A HREF="javascript:SelectReverse()">反选</A>
</TD>
<TD ALIGN="left">姓名<input type="text" name="name" maxlength="8" size="6"> 用户代码<input type="text" name="userno" maxlength="8" size="8">
状态<select name="userstatus">
<option value="">请选择</option>
<option value="正常">正常</option>
<option value="停用">停用</option>
</select>
</TD>
<TD ALIGN="right">
<A HREF="member_add.jsp">新增</A>
<A HREF="javascript:CallUpdate()">修改</A>
<A HREF="javascript:CallDel()">删除</A>
<A HREF="javascript:query()">查询</A>
</TD>
</TR>
</TABLE>
<tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center"> </td>
</tr>
</table>
</td>
</tr>
<TABLE border=1 width=800 align=center cellspacing="0" cellpadding="0">
<TR class="TableHead" align="center">
<TD>
选 择
</TD>
<TD>
会员代码
</TD>
<TD>
姓 名
</TD>
<TD>
性别
</TD>
<TD>
生 日
</TD>
<TD>
电子邮件
</TD>
<TD>
电话号码
</TD>
<TD>
婚 否
</TD>
<TD>
邮 编
</TD>
<TD>
教育程度
</TD>
<TD>
区 域
</TD>
<TD>
注册日期
</TD>
<TD>
会员状态
</TD>
<TD>
会员类别
</TD>
</TR>
<%
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize + 1);
int i=0;
while(i<intPageSize && !sqlRst.isAfterLast()){
userno = sqlRst.getString("userno");
name = sqlRst.getString("name");
gender = sqlRst.getString("gender");
birthday = sqlRst.getString("birthday");
email = sqlRst.getString("email");
phone = sqlRst.getString("phone");
marry = sqlRst.getString("marry");
postcode = sqlRst.getString("postcode");
educ = sqlRst.getString("educ");
area = sqlRst.getString("area");
regdate = sqlRst.getString("regdate");
userstatus = sqlRst.getString("userstatus");
w_memty_id = sqlRst.getString("w_memty_id");
out.println("<TR align=center>");
out.println(" <TD align=center>");
out.println(" <INPUT TYPE='checkbox' NAME='checker' value='"+userno+"'>");
out.println(" </TD>");
out.println("<TD>");out.println(userno);out.println("</TD>");
out.println("<TD>");out.println(name);out.println("</TD>");
out.println("<TD>");out.println(gender);out.println("</TD>");
out.println("<TD>");out.println(birthday);out.println("</TD>");
out.println("<TD>");out.println(email);out.println("</TD>");
out.println("<TD>");out.println(phone);out.println("</TD>");
out.println("<TD>");out.println(marry);out.println("</TD>");
out.println("<TD>");out.println(postcode);out.println("</TD>");
out.println("<TD>");out.println(educ);out.println("</TD>");
out.println("<TD>");out.println(area);out.println("</TD>");
out.println("<TD>");out.println(regdate);out.println("</TD>");
out.println("<TD>");out.println(userstatus);out.println("</TD>");
out.println("<TD>");out.println(w_memty_id);out.println("</TD>");
out.println("</TR>");
i++;
sqlRst.next();
}
}
%>
</table>
<BR>
<TABLE border=0 width=50% align=center cellspacing="0" cellpadding="0">
<TR>
<TD align=center><%if(intPage>1){%>
<a href="queryresult.jsp?page=<%=intPage-1%>">上一页</a><%}%></TD>
<TD align=center>第<%=intPage%>页</TD>
<TD align=center>共<%=intPageCount%>页</TD>
<TD align=center><%if(intPage<intPageCount){%>
<a href="queryresult.jsp?page=<%=intPage+1%>">下一页</a><%}%></TD>
</TR>
</TABLE>
</FORM>
<SCRIPT language="JavaScript" src="../public/bottom.js"></SCRIPT>
</body>
</html>
<%
//关闭结果集
//sqlRst.close();
//关闭SQL语句对象
//sqlStmt.close();
//关闭数据库
//sqlCon.close();
}
else
{
response.sendRedirect("../fail/fail.html");
}
%>
Top
5 楼zl_xue(缺点)回复于 2002-08-01 19:28:19 得分 0
<%@ page language="java" import="guest.*"%>
<%@ include file="conn.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<%@ page errorPage="Exception.jsp"%>
<%
int i;
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
intPageSize = 5;
strPage = request.getParameter("page");
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
%>
<HEAD>
<TITLE>请您留言</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<LINK href="feiyi.css" type=text/css rel=StyleSheet>
<script language=javascript>
function dform(){
var valid="0123456789"
var temp;
if(guset.tel.value!="" && guset.tel.value.length<7){
alert("电话填写框内请填写一个长度大于6的整数!");
return false;
}
else{
for (var i=0; i<guset.tel.value.length; i++) {
temp = "" + guset.tel.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1"){
alert("电话填写框内请填写一个长度大于6的整数!");
return false;
}
} }
if(guset.name.value==""){
alert("昵称忘记啦!");
return false;
}
if(guset.content.value==""){
alert("啥都不想说——内容!");
return false;
}
if(guset.email.value!="" && guset.email.value.indexOf("@")==-1){
alert("email填写不正确!");
return false;
}
}
</script>
<script Language="Javascript">
function sc(){
if(!confirm("你确定要删除吗?")){
return false;
}
}
</script>
</HEAD>
<BODY bgcolor=#BBBBBB>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<form name=guset action=save.jsp method="post" onsubmit="return dform();">
<td width="52%">昵称:
<input type=text name="name" maxlength="20" size="20" style="border:1px solid #A2A8AE;">
</td>
<td colspan=2>性别:<input type="radio" value="帅哥" name="sex" checked>男<input type="radio" value="倩妹" name="sex">女</td>
</tr>
<tr>
<td>信箱:<input type=text name="email" maxlength="20" size="20" style="border:1px solid #A2A8AE;">
</td>
<td colspan=2>电话:<input type="text" name="tel" maxlength="20" size="20" style="border:1px solid #A2A8AE;">
</td>
</tr>
<tr>
<td valign=top>内容:<textarea name="content" cols="30" rows="4" style="border:1px solid #A2A8AE;"></textarea>
</td>
<td><input type=submit name=submit value=" 提交 " style="border:1 solid #BBBBBB;padding-top:2;background-color:#A2A8AE;font-size:9pt;"><br><br><input type=reset name=submit value=" 重写 " style="border:1 solid #BBBBBB;padding-top:2;background-color:#A2A8AE;font-size:9pt;"></td>
</form>
</tr>
</table>
<hr color=#A2A8AE>
<%
SessionLib sl;
Statement stmt;
ResultSet rs;
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery("SELECT * FROM feiyi order by id desc");
//计算记录数
rs.last();
intRowCount = rs.getRow();
//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
if(intPageCount>0){
//将记录指针定位到待显示页的第一条记录上
rs.absolute((intPage-1) * intPageSize + 1);
//显示数据
i = 0;
if (intRowCount-(intPage-1)*5<intPageSize){
intPageSize=intRowCount-(intPage-1)*5;
}
else{
intPageSize=5;
}
while(i<intPageSize && !rs.isAfterLast()&& rs.getString("name")!=null){
String s1 = rs.getString("name");
String s2 = rs.getString("sex");
String s3 = rs.getString("email");
String s5 = rs.getString("tel");
String s4 = rs.getString("time");
String s6 = String.valueOf(rs.getString("content"));
String s7 = rs.getString("ip");
String s8 = rs.getString("id");
String s9 = rs.getString("relapse");
out.println("<table width=100% border=0 cellspacing=2 cellpadding=2>");
out.println("<tr><td width='20%'>");
out.println("昵称:<input value="+s1+" readonly size=10 style='border:0px;background-color:bbbbbb;color:6D6D6D'>");
out.println("</td><td width='14%'>");
out.println("性别:<font color=#6D6D6D>"+s2);
out.println("</td><td width='30%'>");
out.println("信箱:<input value='"+s3+"' size=15 readonly style='border:0px;background-color:bbbbbb;color:6D6D6D'>");
out.println("</td><td width='20%'>");
out.println("电话:<input value='"+s5+"' readonly size=10 style='border:0px;background-color:bbbbbb;color:6D6D6D'>");
out.println("</td><td>");
out.println("T:<input value="+s4+" readonly size=16 style='border:0px;background-color:bbbbbb;color:6D6D6D'>");
out.println("</td></tr>");
out.println("<tr><td colspan=5>");
out.println("<font style='font-size:9pt;'>留言内容:</font><div style='padding-top:3;color:#6D6D6D'> "+s6+"</div>");
out.println("</td></tr>");
out.println("<tr><td colspan=2>");
sl = (SessionLib)session.getValue(session.getId());
if (sl!=null){
out.println("<a href='#' onclick=if(confirm('确定要删除吗?')){location.href='dele.jsp?id="+s8+"'}>删除</a>");
out.println("</td><td>");
out.println("<a href='#' onclick=window.open('reply.jsp?id="+s8+"','','width=300,height=100,top=200,left=200')>回复</a>");
out.println("</td><td align=center colspan=2>");
out.println("IP:<font color=#6D6D6D>"+s7);
}
out.println("</td></tr>");
out.println("<tr><td colspan=5>");
if (s9!=null)
{
out.println("<hr>回复: "+s9);
}
out.println("</td></tr>");
out.println("</table>");
out.println("<hr color=#717D80>");
rs.next();
i++;
}
}
%>
第<%=intPage%>页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="add.jsp?page=<%=intPage+1%>">下一页</a><%}%> <%if(intPage>1){%><a href="add.jsp?page=<%=intPage-1%>">上一页</a><%}%>
<hr color=#A2A8AE>
<%
rs.close();//关闭结果集
stmt.close();//关闭SQL语句对象
con.close();//关闭数据库
%>
<%@ include file="banquan.jsp"%>
</BODY>
</HTML>
其实其他一些功能只要在这基础上参考着做一下就可以了。
Top
6 楼Reve(仨仁仕)回复于 2002-08-02 07:25:52 得分 0
如果要对海量数据的得分页查询的话,可以参考关于CachedRowSet的使用,在sun上查这个关键字,可以有相应的页面。
另外我有个问题关于CachedRowSet的问题,各位不妨看看:
http://www.csdn.net/expert/topic/917/917287.xml?temp=.8176538
Top
7 楼dearmite(笨笨的我*_^)回复于 2002-08-02 09:21:28 得分 0
关注,关注Top




