JSP数据库连接模糊查询报错:索引1超出范围
源代码如下:publicVectorfindAll(Stringuname){//TODOAuto-generatedmethodstubStringsql="selec...
源代码如下:
public Vector findAll(String uname) {
// TODO Auto-generated method stub
String sql= "select * from usermessage where uname like '%?%'";
Connection conn=DBConnection.getConn();
PreparedStatement pre=null;
ResultSet res=null;
Vector vc=new Vector<UserBean>();
try {
pre=conn.prepareStatement(sql);
pre.setString(1, uname);
System.out.println(sql);
res=pre.executeQuery();
while(res.next()){
UserBean ub=new UserBean();
ub.setUid(res.getString(1));
ub.setUname(res.getString(2));
ub.setUpasswd(res.getString(3));
vc.add(ub);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBConnection.closeAll(conn, pre, res);
}
return vc;
}
运行会报错:索引1超出范围,但是如果把模糊查询改为精确查询,也就是: String sql= "select * from usermessage where uname =?";却能正常执行。为什么?是不是模糊查询写错了?? 展开
public Vector findAll(String uname) {
// TODO Auto-generated method stub
String sql= "select * from usermessage where uname like '%?%'";
Connection conn=DBConnection.getConn();
PreparedStatement pre=null;
ResultSet res=null;
Vector vc=new Vector<UserBean>();
try {
pre=conn.prepareStatement(sql);
pre.setString(1, uname);
System.out.println(sql);
res=pre.executeQuery();
while(res.next()){
UserBean ub=new UserBean();
ub.setUid(res.getString(1));
ub.setUname(res.getString(2));
ub.setUpasswd(res.getString(3));
vc.add(ub);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBConnection.closeAll(conn, pre, res);
}
return vc;
}
运行会报错:索引1超出范围,但是如果把模糊查询改为精确查询,也就是: String sql= "select * from usermessage where uname =?";却能正常执行。为什么?是不是模糊查询写错了?? 展开
2个回答
展开全部
你这个问号如果在"%?%"里面,这里只是说匹配有?号的字符串,你根本就没有给一个预处理的值,你再去pre.setString(1,uname)当然会出错嘛,因为你己经给值啦,String sql= "select * from usermessage where uname like ?"这样的才叫设了一个预处理的值嘛,然后pre.setString(1,"'%"+uname+"%'")就OK啦
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是你的读取查询结果的时候把下标设置大了,超出范围了 吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询