jdbcTemplate.queryForObject, возвращающий EmptyResultDataAccessException во время выполнения обычного запроса - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь изменить обычный запрос на параметризованный запрос, используя jdbcTemplate.queryForObject, чтобы избежать SQL-инъекций.Но запрос возвращает EmptyResultDataAccessException - Неверный размер результата: ожидаемый 1, фактический 0, где нормальный запрос работает нормально.Ниже приведен обычный запрос, в котором я получаю правильный результат.

StringBuilder builder = new StringBuilder();
String AcctNameBuilder = adhpDetailUtil.getAccName();
builder.append("select * " +    
                "from gfc.LSI_ELGBLTY " +
                "where INSURANCE_ID = '" + request.getInsuranceId() + "' and " +
                "SYS_CD = '" + request.getSystemId() + "' and " +
                "ACCT_TYPE in (" + AcctNameBuilder.toString() + ")");

Вот параметризованный запрос, который я создал из вышеуказанного запроса.

StringBuilder builder = new StringBuilder();
String AcctNameBuilder = adhpDetailUtil.getAccName();
    final String QUERY = "select * " +  "from gfc.LSI_ELGBLTY " + "where INSURANCE_ID = ? and " + "SYS_CD = ? and " + "ACCT_TYPE in (?)";
    Object[] params = new Object[]  {
    request.getInsuranceId(),request.getSystemId(),AcctNameBuilder};
    String ids = jdbcTemplate.queryForObject(QUERY, params, String.class);
    builder.append(ids)

В первом случае, строитель.append содержит точный запрос, а во втором случае jdbcTemplate.queryForObject возвращает EmptyResultDataAccessException.Что я тут не так делаю.

1 Ответ

0 голосов
/ 13 сентября 2018

Я не верю, что вы можете просто добавить идентификаторы для такого предложения "IN".

Параметр для предложения "IN" технически является массивом. Я столкнулся с этим несколько лет назад, и я не думаю, что это когда-либо было действительно решено.

Если подумать, это довольно сложная проблема, так как планировщик запросов для подготовки оператора не может эффективно ограничить количество параметров.

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