PreparedStatement - não vinculação de todos os parâmetros
-
28-09-2019 - |
Pergunta
Eu estou usando Spring-JDBC para executar o SQL e buscar os resultados.
SELECT
SUM(spend) total_sum
FROM TABLE_NAME
WHERE
sup_id = ? AND
( ( YEAR = ? AND period IN ( ? ) ) OR
( YEAR = ? AND period IN(?)))
E a vincular variáveis são passados como:
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;
}
});
Eu não tenho certeza do que está acontecendo aqui.Eu tenho o problema com a ligação do TERCEIRO parâmetro.Se eu escrever o valor do terceiro parâmetro na consulta propriamente dita, como abaixo está a funcionar.
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(?)))
Se é o problema com aspas ('), em seguida, QUINTA param deve ter sido também o problema.Mas é obrigatório multa.
Tentei usar getNamedParameterJdbcTemplate() bem tanto com o Mapa e o Feijão, mas sem sorte.
Solução
Usando a instrução preparada parâmetros NA cláusula não é legal, até onde eu sei.Consulte o seguinte artigo, que descreve algumas alternativas:
http://www.javaranch.com/journal/200510/Journal200510.jsp#a2