java 在查询中传递要在“IN”子句中使用的字符串列表/集合时出错:无法推断类型

rbl8hiat  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(120)

我尝试传递一个字符串值数组,这样字符串数组就可以在"IN"子句中使用,就像Java/PostgreSQL:
示例查询(包含在字符串变量中):

private static final String strSQLQueryAcceptingAnArray = "SELECT count(*) FROM sometable WHERE clm IN (:arrStringValues);";
public List<SampleReturnObject> getInClauseResults(List<String> lstStringValues) {
    Set<String> setStringValues = new HashSet<String>(lstStringValues);
    return this.query(strSQLQueryAcceptingAnArray, previouslyDefinedRowMapper, new Object[] { setStringValues });
}

但是,当我运行这个程序时,我得到了下面的错误消息:
无法推断用于ors.springframework.jdbc.namedparam.MapSQLParameterSource示例的SQL类型。请使用带有显式类型值的setObject()来指定要使用的类型。
如何使用Java和Spring Framework传递字符串列表/数组以用于PostgreSQL中的"IN"子句?

kr98yfug

kr98yfug1#

您可以将NamedParameterJdbcTemplate与SqlParameterSource一起使用,如下所示:

private static final String strSQLQueryAcceptingAnArray = "SELECT count(*) FROM sometable WHERE clm IN (:arrStringValues)";

    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public List<SampleReturnObject> getInClauseResults(List<String> lstStringValues) {
        Set<String> setStringValues = new HashSet<String>(lstStringValues);
        SqlParameterSource sqlParameterSource = new MapSqlParameterSource("arrStringValues", setStringValues);
        return namedParameterJdbcTemplate.query(strSQLQueryAcceptingAnArray, sqlParameterSource, previouslyDefinedRowMapper);
    }
wi3ka0sx

wi3ka0sx2#

通过使用逗号分隔值将数组值追加到字符串中,然后在sql查询IN子句中使用该字符串。

相关问题