求java高手,在servlet中模糊查询与预处理结合起来出现了错误

说明:fields和keyword是已经设置好的字符串下面是关键代码Connectioncon;PreparedStatementsql;ResultSetrs;Clas... 说明:fields 和keyword是已经设置好的字符串
下面是关键代码
Connection con; PreparedStatement sql;ResultSet rs;
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "12345");
sql = con.prepareStatement("select*from score where ? like '%?%");
sql.setString(1, fields);
sql.setString(2,keyword);
rs = sql.executeQuery();
报错为java.sql.SQLException: Parameter index out of range (2 > number
* of parameters, which is 1).

自己实验后发现是keyword这句出错了。。。为什么呀
展开
 我来答
haodemumu168
2013-05-10 · TA获得超过299个赞
知道小有建树答主
回答量:479
采纳率:100%
帮助的人:282万
展开全部
分解一下写吧,这样写容易乱。
PreparedStatement ps;
String sql = "select*from score where ? like '%?%";
ps = con.prepareStatement(sql);
ps.setString(1, user.getUsername());//这里用get的方法替换成你的fields
ps.setString(2, user.getPassword());//同上 替换成keyword
如果再不行 就直接拼sql语句吧。我以前就是这么干的,占位符什么的太不靠谱了,容易乱。
试验一下 不行给你个我以前做的模糊查询的例子
追问
String sql = "select*from score where ? like '%?%"; 
你这里的是不是少了个'呀?然后我试了只用一个',仍然是那个错误,如果两个都删去,又是sql语句的错误了。请问这里的一个'和两个’有什么区别吗?
大神,我用了你说的方法,还是出现那个错误。能不能将你以前的模糊查询例子发给我看看,非常感谢
追答
我是复制你的 确实是少了一个
String sql = "select*from score where ? like '%?%‘";----》
拼SQL语句也行啊 用StringBuffer+append的方式

例子:
StringBuffer buffer = new StringBuffer(" select b.*,p.pname from bill b left outer join Provider p on b.pid = p.pid where 1=1 ");
if(!(bname == null || (bname = bname.trim()).length() == 0)){
buffer.append("and b.bname like'%" + bname + "%'");
}
if(!(bispay == null || (bispay = bispay.trim()).length() == 0)){
buffer.append("and b.bispay like'%" + bispay + "%'");
}
StringBuffer buffer1 = buffer.append("order by b.btime desc");
String sql = buffer1.toString();
String sql1 = "select c.* from(select rownum rn,a.* from ("+sql+") a)c where c.rn>=? and c.rn<=?";
匿名用户
2013-05-10
展开全部
SQL 语句中,只有一个参数,赋两个参数的值,当然会报错了
追问
诶,我是有2个参数呀?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
调戏纯洁少女
2017-11-24
知道答主
回答量:2
采纳率:0%
帮助的人:1938
展开全部
'%?%' 改成 ? 然后在参数中拼接上%%
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式