前两天在写JDBC select查询的时候遇到一个问题,?被单引号包裹了,导致给问号赋值的时候识别不出来,然后报了这么个错:Parameter index out of range (1 > number of parameters, which is 0).
原来的代码:
Connection con = DBUtil.getConnection();
String sql = "select * from entry_list where entry like '%?%'";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, str);//str是传过来的字符串
ResultSet rs = ps.executeQuery();
这种问号是识别不出来的,然后各种找解决办法,终于这么解决了:
Connection con = DBUtil.getConnection();
String sql = "select * from entry_list where entry like ?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "%"+str+"%");
ResultSet rs = ps.executeQuery();
like的后面整个用?代替,然后给?赋值的时候拼接%,当然也可以不用数据库筛选,直接查询全部,然后在servlet或其他的方法中用正则筛选处理。