2016-04-06 17 views
1

Aşağıdakilere benzer bir kod parçam var. Verilen sorguyu parametrelemeye çalışıyorum ve IN yan tümcesinden sonra bir liste koydum.QueryForList parametrelerini ayarlama

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

Ama bu çalışmıyor ve ben bunun yerine çok PreparedStatement kullanarak denedi

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 

aşağıdaki istisna alıyorum ama bu da işe yaramaz. Lütfen yardım et!

+0

Bu argüman listesinin boş olmadığından emin misiniz? –

+0

Yup. Liste değerlerini doğrudan sorguya bir dize olarak eklediğimde çalışır. –

+0

NamedParametedJdbcTemplate kullanıyorsunuz, çünkü stacktrace'den standart JdbcTemplate kullanıyorsunuz? [Javadoc] 'dan (https://docs.spring.io/spring/docs/current/javadoc-api/index.html?org/springframework/jdbc/core/JdbcTemplate.html) Bu sınıf, bir kez sarılmış JdbcTemplate'e delege eder. adlandırılmış parametrelerden JDBC stiline '?' Yer tutucuları yürütme zamanında yapılır. Aynı zamanda ** bir Değerler Listesinin uygun sayıda yer tutucusuna ** genişletilmesine de izin verir. –

cevap

0

Kullanım NamedParametedJdbcTemplate, çünkü javadoc den: ''

JDBC stiline adlandırılmış parametrelerden ikame kez sarılmış JdbcTemplate Bu sınıf delegeler Yer tutucuları yürütme zamanında yapılır. Ayrıca, bir değerler Listesinin uygun yer tutucu sayısına genişletilmesine de olanak tanır.

İlgili konular