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!
Bu argüman listesinin boş olmadığından emin misiniz? –
Yup. Liste değerlerini doğrudan sorguya bir dize olarak eklediğimde çalışır. –
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. –