JSP模糊查询!!!各位高人指点啊!

ilrxx 2007-05-03 06:41:39
String keyword = "";
String condition = "";
if(request.getParameter("searchkeyword")!=null)
{
keyword = chS.chsdeal(request.getParameter("searchkeyword"));
condition = "SELECT * FROM tb_Bookinfo WHERE BookName LIKE '%"+keyword+"%'";

}
else
{
keyword = "无";
condition= "SELECT * FROM tb_Bookinfo";
}
ResultSet rs = dbO.executeQuery(condition);
我想解决的问题是,输入查询关键字后,可显示相应的结果,如果关键字为空,查询数据库中所有的记录,但是现在的问题是:查询条件输完以后,点击查询,结果都没有问题,但是点击下一页或者上一页就直接把数据库中的所有记录分页显示了,请问怎么解决这个问题啊
...全文
647 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
谢谢大家,我知道查询关键字丢掉了,我去试试吧,如果成功,我就给分了,再次感谢各位
awusoft 2007-05-04
  • 打赏
  • 举报
回复
在点击上一页下一页的时候,要把这个关键字也传下去啊,我想可能是忘记传下去了

<a href=".......&searchkeyword=<%=searchkeyword%>">下一页</a>
<a href=".......&searchkeyword=<%=searchkeyword%>">上一页</a>

注意哦,如果是中文的话要转一下码哦.
判断一下
if(request.getMethod().equals("GET"))
{
keyword=new String(keyword.getBytes("ISO8859-1"));
}
Tameway 2007-05-04
  • 打赏
  • 举报
回复
建议用一个session来保存查询的关键字,或者采用一个hidden的input来传递

因为下一页以后,你的keyword就变成了无,于是就执行了else里的查询

实际上就算有分页,也应该是只有一个记录集RS,而看你的程序里的算法,无疑每次换页都查询了一次。。
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
各位高手,谁能帮我解释下什么叫内存分页,还有就是我的程序是内存分页吗?
林二棍子 2007-05-04
  • 打赏
  • 举报
回复
有几种分页方式:
用SQL语句在查询的时候分页。每次从数据库中取出符合条件的固定条数的记录集,然后把记录集转换为java里面的集合,就可以关闭ResultSet。而页面上也只得到当前页的数据集合。我只用过这种。

然后是一次性把所有的记录全部取出,也转换为java里面的集合,关闭ResultSet。把集合给页面,由页面决定怎么分页,这样页面得到的是全部数据。

最后应该就是楼主的方式了,页面直接得到ResultSet
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
谢谢你,我再试试吧,顺便问一下内存分页是怎么回事啊?
林二棍子 2007-05-04
  • 打赏
  • 举报
回复
OMG...我以前从来没这么做过...

排除内存分页的因素,不想丢失searchkeyword的话,在<div id="Layer5">里面的链接要改成:
<div align="center">当前页数:[<%=showpage%> /<%=pagecount%>]
<a href="Booksearch_result.jsp?searchkeyword=<%=keyword%>&topage=<%=1%>">第一页</a>
<a href="Booksearch_result.jsp?searchkeyword=<%=keyword%>&topage=<%=showpage-1%>">上一页</a>
    
<a href="Booksearch_result.jsp?searchkeyword=<%=keyword%>&topage=<%=showpage+1%>">下一页</a>
<a href="Booksearch_result.jsp?searchkeyword=<%=keyword%>&topage=<%=pagecount%>">尾页</a>
跳转到第
<label>
<input name="topage" type="text" size="4" value="<%=showpage%>" />
</label>
页</div>

考虑内存分页的话,还是等别的高手来解答吧
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
这是我整个的算法,你帮帮我看看,这是我毕设,我很着急啊,谢谢你了!
我是从seahch.jsp中传查询条件,然后在result.jsp中查看结果
search.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<form id="form1" name="form1" method="post" action="Booksearch_result.jsp">
<table width="968" height="60">
<tr>
<td width="290"> </td>
<td width="255"> </td>
<td width="407"> </td>
</tr>
<tr>
<td> </td>
<td><label></label>
模糊查询:
<label>

<input type="text" name="searchkeyword">
</label></td>
<td><label></label>
<label>
<input type="submit" name="Submit" value="搜索">
</label></td>
</tr>
</table>
</form>

result.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<jsp:useBean id="dbO" class="beans.DBoperation" scope="page"/>
<jsp:useBean id="chS" class="beans.Chsdeal" scope="page"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<link rel="stylesheet" href="CSS/style.css" type="text/css" media="screen">
<style type="text/css">
<!--
#Layer1 {
position:absolute;
left:102px;
top:1132px;
width:972px;
height:40px;
z-index:1;
}

#Layer2 {
position:absolute;
left:386px;
top:667px;
width:519px;
height:27px;
z-index:3;
}
#Layer3 {
position:absolute;
left:385px;
top:708px;
width:512px;
height:38px;
z-index:4;
}
#Layer4 {
position:absolute;
left:388px;
top:758px;
width:508px;
height:51px;
z-index:5;
}
#Layer5 {
position:absolute;
left:384px;
top:1059px;
width:639px;
height:30px;
z-index:6;
}

-->
</style>
</head>
<%
String keyword = "";
String condition = "";
if(request.getParameter("searchkeyword")!=null)
{
keyword = chS.chsdeal(request.getParameter("searchkeyword"));
condition = "SELECT * FROM tb_Bookinfo WHERE BookName LIKE '%"+keyword+"%'";

}
else
{
keyword = "无";
condition= "SELECT * FROM tb_Bookinfo";
}
ResultSet rs = dbO.executeQuery(condition);
%>
<body>
<%
int pagesize = 5;
int rowcount = 0;
int pagecount = 0;
if(!rs.next())
{
out.print("<script language='javascript'>alert('目前没有记录可以显示!');window.location.href='index.jsp';</script>");
}
else
{
rs.last();
rowcount = rs.getRow();
int showpage = 1;
pagecount = (rowcount%pagesize)==0?(rowcount/pagesize):((rowcount/pagesize)+1);
String topage = request.getParameter("topage");
if(topage!=null)
{
showpage = Integer.parseInt(topage);
if(showpage>pagecount)
{
showpage = pagecount;
}

else if(showpage<=0)
{
showpage = 1;
}
}
%>
<div id="Layer1"><jsp:include page="Tail.jsp"/></div>
<div id="Layer2">
<table width="514" height="25">
<tr>
<td><div align="left"><span class="tableBorder_B">您输入的查询关键字为</span>: [<%=keyword%> ] </div></td>
</tr>
</table>
</div>
<div id="Layer3">
<table width="511" height="39">
<tr>
<td width="18"> </td>
<td width="182">书名</td>
<td width="205">出版社</td>
<td width="86">购买</td>
</tr>
</table>
</div>
<div id="Layer4">
<table width="507" height="49">
<%
rs.absolute((showpage-1)*pagesize+1);
for(int i = 1;i<=pagesize;i++)
{

%>
<tr>
<td width="15"><img src="Images/greendot.gif" width="11" height="13" /></td>
<td width="183"><%=rs.getString(2)%></td>
<td width="200"><%=rs.getString(4)%></td>
<td width="89"><label>
<input type="submit" name="Submit3" value="购买" />
</label></td>
</tr>
<%
if(!rs.next())
{break;}
}
%>
</table>
</div>
<div id="Layer5">
<table width="644" height="31">
<tr>
<td><div align="center">当前页数:[<%=showpage%> /<%=pagecount%>] <a href="Booksearch_result.jsp?topage=<%=1%>">第一页</a> <a href="Booksearch_result.jsp?topage=<%=showpage-1%>">上一页</a>     <a href="Booksearch_result.jsp?topage=<%=showpage+1%>">下一页</a> <a href="Booksearch_result.jsp?topage=<%=pagecount%>">尾页</a> 跳转到第
<label>
<input name="topage" type="text" size="4" value="<%=showpage%>" />
</label>
页</div></td>
</tr>
</table>
</div>
<table width="938" height="226">
<tr>
<td><div align="center">
<jsp:include page="Top.jsp"/>
<img src="Images/index_10.gif" width="957" height="52" />
<jsp:include page="Search.jsp"/>
<marquee direction=left TrueSpeed scrollAmount=2
scrollDelay=80 height=20
width=500 border="0">
<div align="left">欢迎光临明日网上书店,希望您能购买到称心如意的经典书籍!客服电话:13520086868,QQ:460925684。</div>
</marquee> </div></td>
</tr>
<tr>
<td><table width="100%" height="330">
<tr>
<td width="223"><jsp:include page="Left.jsp"/></td>
<td width="10" height="330"><div align="center"><img src="Images/tilel.gif" width="2" height="400" /></div></td>
<td> </td>
<%}%>
</tr>
</table></td>
</tr>
</table>
</body>
</html>


你帮我看看应该怎么改啊,谢谢你了
林二棍子 2007-05-04
  • 打赏
  • 举报
回复
我自己是不用内存分页的。

不过我刚才取搜索了下,你可以参考下面的文章
http://blog.csdn.net/mc1035/archive/2006/10/12/1331739.aspx
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
换句话说,我点下一页的时候,程序是从哪里开始走啊?
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
Nicholas你可以说的具体一点吗?我知道我的程序错在哪里,可是我不知道怎么改了,我刚才试了一下用session保存了查询关键字,然后下一页的时候应该怎么弄啊,就是我下一页链接那里
ilrxx 2007-05-04
  • 打赏
  • 举报
回复
还是不行啊,具体怎么弄啊?
林二棍子 2007-05-04
  • 打赏
  • 举报
回复
支持Tameway的说法。LZ采用的是数据一次加载然后在内存中分页的办法,所以在换页的时候不应该再进行数据库查询,直接在内存中取符合的页就好了。
xiangbo520 2007-05-03
  • 打赏
  • 举报
回复
你的程序在翻页的时候把查询参数给丢掉了,当然就是显示全部记录了
林二棍子 2007-05-03
  • 打赏
  • 举报
回复
上一页下一页的时候searchkeyword参数对应的值丢掉了。

一般要有一个input用来保存searchkeyword的值,然后换页的时候用form.submit();
phoenixYiYou 2007-05-03
  • 打赏
  • 举报
回复
if(request.getParameter("searchkeyword")!=null || request.getParameter("searchkeyword") != "")
一定是判空这出了问题,可以加上以上的试试!
边城狂人 2007-05-03
  • 打赏
  • 举报
回复
分页是个麻烦的东西,慢慢研究吧。网上很多资料讲这方面的东西。方法有很多种。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧