PreparedStatement - не привязывает все параметры - PullRequest
1 голос
/ 25 ноября 2010

Я использую 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. Если я напишу значение третьего параметра в самом запросе, как показано ниже, он будет работать.

 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(?)))

Если это проблема с кавычками ('), тогда FIFTH param также должен был быть проблемой. Но это обязательный штраф.

Я пытался использовать getNamedParameterJdbcTemplate (), а также с Map и Bean, но безуспешно.

1 Ответ

2 голосов
/ 25 ноября 2010

Насколько я знаю, использование подготовленных параметров оператора для предложения IN недопустимо.См. Следующую статью, в которой описаны некоторые альтернативы:

http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...