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 =?";却能正常执行。为什么?是不是模糊查询写错了??
展开
 我来答
东桖柳83
2009-03-25 · TA获得超过599个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:378万
展开全部
你这个问号如果在"%?%"里面,这里只是说匹配有?号的字符串,你根本就没有给一个预处理的值,你再去pre.setString(1,uname)当然会出错嘛,因为你己经给值啦,String sql= "select * from usermessage where uname like ?"这样的才叫设了一个预处理的值嘛,然后pre.setString(1,"'%"+uname+"%'")就OK啦
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深瞳动漫
2015-09-12 · TA获得超过517个赞
知道小有建树答主
回答量:326
采纳率:50%
帮助的人:90.6万
展开全部
是你的读取查询结果的时候把下标设置大了,超出范围了 吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式