2016-04-06 7 views
1

私は次のようなコードを持っています。私は指定されたクエリをパラメータ化し、IN句の後にリストを配置しようとしています。QueryForListはパラメータを設定していません

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; 
} 

しかし、これは動作していないと私は次の例外

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 

を取得しています私も代わりにPreparedStatementを使用して試してみましたが、それはどちらか動作しません。助けてください!

+0

リスト引数がヌルではありませんか? –

+0

はい。リストの値を文字列としてクエリに直接追加するだけで動作します。 –

+0

標準のJdbcTemplateを使用しているように見えるスタックトレースからNamedParametedJdbcTemplateを使用していますか? [javadoc](https://docs.spring.io/spring/docs/current/javadoc-api/index.html?org/springframework/jdbc/core/JdbcTemplate.html)からこのクラスはラップされたJdbcTemplateに委譲します。名前付きパラメータからJDBCスタイルへの置換 '?'プレースホルダは実行時に実行されます。また、適切な数のプレースホルダー**に値の一覧を展開することもできます**。 –

答えて

0

使用NamedParametedJdbcTemplate、理由javadocから:「?」

JDBCスタイルに名前付きパラメータから置換一度包まJdbcTemplateにこのクラスに委譲プレースホルダは実行時に実行されます。 また、適切な数のプレースホルダに値の一覧を展開することもできます。

関連する問題