JSP 模糊查询分页错误,希望高手指点下
Stringname=newString(request.getParameter("name").trim().getBytes("ISO-8859-1"));Stri...
String name=new String(request.getParameter("name").trim().getBytes("ISO-8859-1"));
String sex=new String(request.getParameter("sex").trim().getBytes("ISO-8859-1")); //接收name sex参数
Connection con= null;
Statement st =null;
String sql =null;
ResultSet rs=null;
int pageSize; //一个页面显示的记录数目
int totalRowCount; //总的记录的数目
int pageCount; //总的页数
int nextPageNo; //待显示页面的页号
pageSize=5; //设置一个页面所要显示的记录的数目为5条
int i; //用于统计从数据库中读取记录的数目(不能超过一个页面所能显示的记录数pageSize)
String strPage=request.getParameter("page");
if(strPage==null){ //如果page传递的页码参数为空
nextPageNo=1; //设置当前页面为第1页
}
else{
nextPageNo=Integer.parseInt(strPage);
if(nextPageNo<1){ //如果page传递的参数为负数
nextPageNo=1; //则显示第1页
}
}
con =db.getCon();
st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
if(sex==null||sex.trim().length()==0)
sql="select * from student";
else
sql="select * from student where sex='"+sex.trim()+"'";
if(name==null||name.trim().length()==0)
sql=sql;//相当于 "select *from student"
else
if(sql.indexOf("where")==-1)//SQL语句中没有条件where子句(indexOf)
sql=sql+" where name like '%"+name+"%'"; //相当于 "select * from where name like '%"+name+"'"
else
sql=sql+" and name like '%"+name+"%'"; //相当于 "select * from where sex='"+sex.trim()+"' and name like '%"+name+"%'"
rs=st.executeQuery(sql);
rs.last(); //游标定位到最后一跳记录的位置
totalRowCount=rs.getRow(); //获取当前行的行号,即为总的记录数目
pageCount=(totalRowCount+pageSize-1)/pageSize; //获取分页数目
if(nextPageNo>pageCount){
nextPageNo=pageSize; //当前页号大于分页的数目,则当前页号就为分页的数目
}
%>
<table>
<tr>
<td><B>序号</B></td>
<td><B>学号</B></td>
<td><B>姓名</B></td>
</tr>
<%
if(pageCount>0){
rs.absolute((nextPageNo-1)*pageSize+1); //将指针指向将要显示的页面的第一条记录
i=0;
while(i<pageSize&&!rs.isAfterLast()){
//统计读取数据库中记录数小于每页能够显示的记录条数,并且没有读到数据库表中最后一条记录
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
</tr>
<%rs.next();
i++;}
}
%>
</table>
<p align="center">
第<%=nextPageNo%>页 共<%=pageCount%>页
<a href="stuselect.jsp?showPage=1">『首页』</a>
<%if(nextPageNo>1){%>
<a href="stuselect.jsp?page=<%=nextPageNo-1%>">上一页</a>
<%}%>
<%if(nextPageNo<pageCount){%>
<a href="stuselect.jsp?page=<%=nextPageNo+1%>">下一页</a>
<%}%>
<a href="stuselect.jsp?page=<%=pageCount%>">『尾页』</a>
</p>
进行查询只能查询到第一页,点击下一页 上一页 都不行。分页代码和SQL语句的查询代码独立测试都可以执行。2者结合起来就只能显示第一页
感觉好象是接收不到page 参数,小弟刚学JSP不久,希望高手指点下,给个比较明确的答案。 展开
String sex=new String(request.getParameter("sex").trim().getBytes("ISO-8859-1")); //接收name sex参数
Connection con= null;
Statement st =null;
String sql =null;
ResultSet rs=null;
int pageSize; //一个页面显示的记录数目
int totalRowCount; //总的记录的数目
int pageCount; //总的页数
int nextPageNo; //待显示页面的页号
pageSize=5; //设置一个页面所要显示的记录的数目为5条
int i; //用于统计从数据库中读取记录的数目(不能超过一个页面所能显示的记录数pageSize)
String strPage=request.getParameter("page");
if(strPage==null){ //如果page传递的页码参数为空
nextPageNo=1; //设置当前页面为第1页
}
else{
nextPageNo=Integer.parseInt(strPage);
if(nextPageNo<1){ //如果page传递的参数为负数
nextPageNo=1; //则显示第1页
}
}
con =db.getCon();
st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
if(sex==null||sex.trim().length()==0)
sql="select * from student";
else
sql="select * from student where sex='"+sex.trim()+"'";
if(name==null||name.trim().length()==0)
sql=sql;//相当于 "select *from student"
else
if(sql.indexOf("where")==-1)//SQL语句中没有条件where子句(indexOf)
sql=sql+" where name like '%"+name+"%'"; //相当于 "select * from where name like '%"+name+"'"
else
sql=sql+" and name like '%"+name+"%'"; //相当于 "select * from where sex='"+sex.trim()+"' and name like '%"+name+"%'"
rs=st.executeQuery(sql);
rs.last(); //游标定位到最后一跳记录的位置
totalRowCount=rs.getRow(); //获取当前行的行号,即为总的记录数目
pageCount=(totalRowCount+pageSize-1)/pageSize; //获取分页数目
if(nextPageNo>pageCount){
nextPageNo=pageSize; //当前页号大于分页的数目,则当前页号就为分页的数目
}
%>
<table>
<tr>
<td><B>序号</B></td>
<td><B>学号</B></td>
<td><B>姓名</B></td>
</tr>
<%
if(pageCount>0){
rs.absolute((nextPageNo-1)*pageSize+1); //将指针指向将要显示的页面的第一条记录
i=0;
while(i<pageSize&&!rs.isAfterLast()){
//统计读取数据库中记录数小于每页能够显示的记录条数,并且没有读到数据库表中最后一条记录
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
</tr>
<%rs.next();
i++;}
}
%>
</table>
<p align="center">
第<%=nextPageNo%>页 共<%=pageCount%>页
<a href="stuselect.jsp?showPage=1">『首页』</a>
<%if(nextPageNo>1){%>
<a href="stuselect.jsp?page=<%=nextPageNo-1%>">上一页</a>
<%}%>
<%if(nextPageNo<pageCount){%>
<a href="stuselect.jsp?page=<%=nextPageNo+1%>">下一页</a>
<%}%>
<a href="stuselect.jsp?page=<%=pageCount%>">『尾页』</a>
</p>
进行查询只能查询到第一页,点击下一页 上一页 都不行。分页代码和SQL语句的查询代码独立测试都可以执行。2者结合起来就只能显示第一页
感觉好象是接收不到page 参数,小弟刚学JSP不久,希望高手指点下,给个比较明确的答案。 展开
展开全部
首先页面要接收3个参数,nextPageNo、sex、name。你跳转到下一页面时,你并没有给它sex和name这两个参数。导致查询结果混乱,应该<a href="stuselect.jsp?showPage=..&sex=..&name=..">。
其次,获得数据条目的时候应当首先调用rs.next();你这么改
while(i<pageSize&&!rs.isAfterLast()&&rs.next()){
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
</tr>
<%
i++;}
}
如果还是不行的话,应该是页面刷新问题了
其次,获得数据条目的时候应当首先调用rs.next();你这么改
while(i<pageSize&&!rs.isAfterLast()&&rs.next()){
%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><%=rs.getString(3)%></td>
</tr>
<%
i++;}
}
如果还是不行的话,应该是页面刷新问题了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询