像 %?% 不能作为 StringBuilder SQL 查询的一部分

ser*_*nni 2 java sql string sql-like

有以下字符串构建的 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()); 
    ...
Run Code Online (Sandbox Code Playgroud)

问题出在这部分:

queryWhere.append("and descr LIKE %?% ")
Run Code Online (Sandbox Code Playgroud)

LIKE不起作用。
在调试中检查 - 它已添加到所有查询中。
它应该是单引号还是其他一些技巧?

谢谢。

已编辑

试过单引号:queryWhere.append("and descr LIKE '%?%' ") 不起作用

这是调试字符串:

select * from messages where msg_id=? and descr LIKE '%?%' 
Run Code Online (Sandbox Code Playgroud)

Jus*_*ler 5

假设查询是使用 a 运行的PreparedStatement,问题可能是queryForList调用setString(1, 'some descr'). 这会将 SQL 解析为"... and descr LIKE %'some descr'%".

尝试将代码更改为:

queryWhere.append("and descr LIKE ?");
...
.setString(1, "%some descr%")
Run Code Online (Sandbox Code Playgroud)