String sql = "select count(*) from category c where 1 = 1 and c.category_name like ? ";
pstmts = conn.prepareStatement(sql);
pstmts.setString(1,"%资讯%");
rs = pstmts.executeQuery();
我也碰到这个问题以前,我是这样解决的。假设?代表的是name这个参数吧
String sql = "select * from article where title like ? order by id desc";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, '%'+name+'%');
写到这应该可以了吧,后来都没有这样做了,感觉很少用?了。下面是我写的一个方法,全部放出来了,你可以看一下你想要的那部分我是怎么写的。应该是比较清楚的。
public int countSelectByMsg(Connection conn, ManageDto manageDto)
throws Exception {
// TODO Auto-generated method stub
StringBuffer sql = new StringBuffer();
sql.append("SELECT COUNT(*) AS C FROM USER U LEFT JOIN DUTY D ON U.DUTY_ID=D.DUTY_ID LEFT JOIN DEPARTMENT DP ON DP.DEPARTMENT_ID=D.DEPARTMENT_ID WHERE 1=1 ");
// 连接查询条件
// 姓名
if (manageDto.getUserName() != null&& !manageDto.getUserName().equals("")) {
sql.append(" AND USER_NAME LIKE '%" + manageDto.getUserName()+ "%'");
}
// 电话
if (manageDto.getTelephone() != null&& !manageDto.getTelephone().equals("")) {
sql.append(" AND TELEPHONE LIKE '%" + manageDto.getTelephone()+ "%'");
}
// 邮箱
if (manageDto.getEmail() != null && !manageDto.getEmail().equals("")) {
sql.append(" AND EMAIL LIKE '%" + manageDto.getEmail() + "%'");
}
// 身份证
if (manageDto.getIdentificationCard() != null&& !manageDto.getIdentificationCard().equals("")) {
sql.append(" AND IDENTIFICATION_CARD LIKE '%"
+ manageDto.getIdentificationCard() + "%'");
}
// 性别
if (manageDto.getUserSex() != null&& !manageDto.getUserSex().equals("")) {
sql.append(" AND USER_SEX LIKE '%" + manageDto.getUserSex() + "%'");
}
// 部门
if (manageDto.getDepartmentId() != 0) {
sql.append(" AND DP.DEPARTMENT_ID ="
+ manageDto.getDepartmentId());
}
// 职位
if (manageDto.getDutyId() != 0) {
sql.append(" AND D.DUTY_ID =" + manageDto.getDutyId());
}
PreparedStatement ps = conn.prepareStatement(sql.toString());
ResultSet rs = ps.executeQuery();
rs.next();
return rs.getInt(1);
}
你可以用CONCAT函数, PreparedStatement可以识别,
如下:
String sql = "select * from article where title like CONCAT('%', ?, '%') order by id desc";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, "关键字");
这样就不会报错了