JdbcTemplate抛出java.sql.SQLException:

时间:2018-02-05 10:50:48

标签: java sql-server hibernate jdbctemplate

String query = "Select count(*) from product where date_added in (?)";

Object[] params = {dates}; //dates is a list of java.sql.Date

Long productCount = jdbcTemplate.queryForObject(query, params, Long.class);

最后一行抛出:

  

java.sql.SQLException:无法在java.util.ArrayList之间进行转换   使用IN子句

查询数据库时使用JAVA_OBJECT和JAVA_OBJECT

已经尝试使用 NamedParameterJdbcTemplate ,它要求列表中的引号,这可能会导致sql注入。要使用jdbcTemplate克服这个问题。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您需要一个参数来源:

Set<Integer> ids = ...;

MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", ids);

List<Foo> foo = getJdbcTemplate().query("SELECT * FROM foo WHERE a IN (:ids)", 
parameters, getRowMapper());

仅当getJdbcTemplate()返回NamedParameterJdbcTemplate类型的实例时,此方法才有效。还要确保将结果捕获到列表中。