Spring-JDBCを使用してSQLを実行し、結果をフェッチしています。
SELECT
SUM(spend) total_sum
FROM TABLE_NAME
WHERE
sup_id = ? AND
( ( YEAR = ? AND period IN ( ? ) ) OR
( YEAR = ? AND period IN(?)))
そして、バインド変数は次のように渡されます。
final Object[] paramMap = { "1234", "2010",
"'01_JAN','02_FEB','03_MAR'", "2009", "'11_NOV','12_DEC'" };
final List<LeadTimeDto> query = getJdbcTemplate().query(sql, paramMap,
new RowMapper<LeadTimeDto>() {
@Override
public LeadTimeDto mapRow(final ResultSet resultSet,
final int arg1) throws SQLException {
final LeadTimeDto leadTimeDto = new LeadTimeDto();
final String string = resultSet.getString("total_sum");
System.out.println("ltime = " + string);
leadTimeDto.setLeadTime(string);
return leadTimeDto;
}
});
ここで何が起こっているのかわかりません。THIRDパラメーターのバインドに問題があります。以下のようにクエリ自体に3番目のパラメータの値を書き込むと、機能しています。
SELECT
SUM(spend) total_sum
FROM TABLE_NAME
WHERE
sup_id = ? AND
( ( YEAR = ? AND period IN ( '01_JAN','02_FEB','03_MAR' ) ) OR
( YEAR = ? AND period IN(?)))
quotes(')の問題である場合は、FIFTHパラメーターも問題であるはずです。しかし、それはうまく拘束されています。
MapとBeanの両方でgetNamedParameterJdbcTemplate()を使用してみましたが、うまくいきませんでした。