求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这句出错了。。。为什么呀 展开
下面是关键代码
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这句出错了。。。为什么呀 展开
3个回答
展开全部
分解一下写吧,这样写容易乱。
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语句吧。我以前就是这么干的,占位符什么的太不靠谱了,容易乱。
试验一下 不行给你个我以前做的模糊查询的例子
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<=?";
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询