Java QueryForList未设置参数

Java QueryForList未设置参数,java,security,prepared-statement,in-clause,Java,Security,Prepared Statement,In Clause,我有一段类似下面的代码。我正在尝试参数化给定的查询,并在IN子句后面放置一个列表 public List<Map<String,Object>> parameterize(List<String> list) throws IllegalArgumentException { String b = "SELECT * FROM table_name WHERE abc IN (:value)"; MapSqlParameterSource na

我有一段类似下面的代码。我正在尝试参数化给定的查询,并在IN子句后面放置一个列表

public List<Map<String,Object>> parameterize(List<String> list) throws IllegalArgumentException {
    String b = "SELECT * FROM table_name WHERE abc IN (:value)";
    MapSqlParameterSource namedParameters = new MapSqlParameterSource();
    namedParameters.addValue("value", list));
    List<Map<String,Object>> results = getJdbcTemplate().queryForList(b, namedParameters);
    if (results == null)
        throw new IllegalArgumentException("No values.");
    return results;
 }

我也尝试过使用PreparedStatement,但也不起作用。请帮忙

使用NamedParametedJdbcTemplate,因为:


在执行时完成从命名参数到JDBC样式“?”占位符的替换后,此类将委托给包装的JdbcTemplate它还允许将值列表扩展到适当数量的占位符。

使用NamedParametedJdbcTemplate,因为:


在执行时完成从命名参数到JDBC样式“?”占位符的替换后,此类将委托给包装的JdbcTemplate它还允许将值列表扩展到适当数量的占位符。

是否确定列表参数不为null?是的。当我直接将列表值作为字符串附加到查询中时,它会起作用。您是否使用NamedParametedJdbcTemplate,因为从stacktrace看,您似乎使用标准JdbcTemplate?一旦在执行时完成从命名参数到JDBC样式“?”占位符的替换,该类将委托给包装的JdbcTemplate。它还允许将值列表扩展到适当数量的占位符。否。我使用了标准的Jdbc模板。谢谢我试试看,它成功了!非常感谢你!你确定列表参数不是空的吗?是的。当我直接将列表值作为字符串附加到查询中时,它会起作用。您是否使用NamedParametedJdbcTemplate,因为从stacktrace看,您似乎使用标准JdbcTemplate?一旦在执行时完成从命名参数到JDBC样式“?”占位符的替换,该类将委托给包装的JdbcTemplate。它还允许将值列表扩展到适当数量的占位符。否。我使用了标准的Jdbc模板。谢谢我试试看,它成功了!非常感谢你!
Caused by: java.sql.SQLException: JZ0SE: Invalid object type (or null object) specified for setObject().
    at com.sybase.jdbc4.jdbc.ErrorMessage.raiseError(ErrorMessage.java:775)
    at com.sybase.jdbc4.jdbc.SybPreparedStatement.setObject(SybPreparedStatement.java:1356)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.setObject(NewProxyPreparedStatement.java:721)
    at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:401)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:234)
    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:165)
    at org.springframework.jdbc.core.ArgumentPreparedStatementSetter.doSetValue(ArgumentPreparedStatementSetter.java:65)
    at org.springframework.jdbc.core.ArgumentPreparedStatementSetter.setValues(ArgumentPreparedStatementSetter.java:46)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:644)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589)
    ... 53 more