有下列字符串建立SQL查询:像%%不作为StringBuilder的SQL查询的一部分工作
StringBuilder querySelect = new StringBuilder("select * from messages ");
StringBuilder queryWhere = new StringBuilder("where msg_id=?");
if (fileRSVO.getFileName()!= null){
queryWhere.append("and descr LIKE %?% ");
}
querySelect.append(queryWhere);
List<Map<String, Object>> list = getJdbcTemplate().queryForList(querySelect.toString(), params.toArray());
...
的问题是在这个部分:
queryWhere.append("and descr LIKE %?% ")
LIKE
不起作用。
检入调试 - 将其添加到所有查询中。
它应该是单引号还是其他一些技巧?
谢谢。
EDITED
试图单引号:queryWhere.append("and descr LIKE '%?%' ")
不起作用
这里是调试字符串:
select * from messages where msg_id=? and descr LIKE '%?%'
queryWhere.append(“和descr LIKE'%”+ fileRSVO.getFileName()+“%'”) - 它是,无论如何你的方向是正确的 – sergionni 2011-03-21 20:18:04
@serionni:这是一个非常糟糕的解决方案,它很容易受到SQL注入。使用我的解决方案(在数据库端添加'%'s)或Justin Muller的(在将'fileRSVO.getFileName()'放入'params'时添加'%'s)。 – axtavt 2011-03-21 20:29:11
@sergionni:注意纠正,这种方式应该更符合数据库。 – axtavt 2011-03-21 20:35:32