Il semble que vous mélangez des paramètres nommés et de position. Il est préférable d'utiliser l'un ou l'autre, mais pas les deux.
Essayez
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("ids", year);
parameters.addValue("provnum", provnum);
return this.template.getJdbcOperations().query(
"SELECT * FROM INCOME WHERE PROVNUM=:provnum AND FISCALDATE IN (:ids)", this.rowMapper, parameters);
Après votre commentaire, je vois que vous utilisez la mauvaise surcharge de la méthode query()
: il y a assez peu de choix, il est donc pas surprenant que quelques erreurs peuvent se glisser!
Vous devez appeler
return this.template.getJdbcOperations().query(
"SELECT ... etc.", parameters, this.rowMapper);
Dans votre premier appel, vous appelez la version query(String sql, RowMapper mapper, Object... params)
qui attend les paramètres littérales. L'appel révisé est query (String sql, paramètres SqlParameterSource, mappeur RowMapper) - SqlParamtersSource en tant que second argument est la clé. Aussi, il vaut la peine de vérifier que vous utilisez NamedParameterJdbcTemplate.
Le problème spécifique n'a rien à voir avec la clause IN. – BalusC