SQLServerException: «[...] Индекс 1 выходит за пределы диапазона [...]» при использовании NamedParameterJdbcTemplate - PullRequest
0 голосов
/ 08 февраля 2019

У меня проблема с парой SQL-операторов, когда я использую NamedParameterJdbcTemplate ( mssql-jdbc 7.2.0 ).

Пример:

return jdbcTemplate.query("SELECT Mitarbeiter, CASE "+
        " WHEN Storno = 1 THEN Dauer * -1 "+
        " WHEN Storno = 0 THEN Dauer " +
        " END AS Wert "+
        "FROM Werte " +
        "WHERE Mitarbeiter IN (:mitarbeiter)", parameterSource, rs -> {
    HashMap<String, Integer> hashMap = new HashMap<>();
    while (rs.next()) {
        hashMap.put(rs.getString("Mitarbeiter"), rs.getInt("Wert"));
    }
    return hashMap;
});

Когда я выполняю SQL-оператор в SQL Server Management Studio, он работает нормально.Но когда я выполняю инструкцию с помощью jdbcTemplate, SQLServerException "[...] Индекс 1 выходит за пределы диапазона [...]" повышается.

Может быть, какой-то зарезервированный символ вызывает проблему?

Обновление:

После понижения spring-jdbc с 7.2.0 до 7.0.0 мой кодработает отлично.Кажется, что в новой версии есть некоторые проблемы с синтаксическим анализом sql-оператора.Взгляните на https://github.com/Microsoft/mssql-jdbc/issues/952. Проблема будет исправлена ​​в версии 7.2.1.

1 Ответ

0 голосов
/ 08 февраля 2019

Это слишком долго для комментария.Я не понимаю, как вы пришли к выводу, что - 1 в запросе является причиной вашей проблемы.

Этот запрос в порядке:

SELECT Mitarbeiter,
       (CASE WHEN Storno = 1 THEN Dauer * -1 
             WHEN Storno = 0 THEN Dauer 
        END) AS Wert 
FROM Werte 
WHERE Mitarbeiter IN (:mitarbeiter);

Было бы проще написатькак:

       (CASE WHEN Storno = 1 THEN - Dauer
             WHEN Storno = 0 THEN Dauer 
        END) AS Wert 

Или, если Storno принимает только значения 0 и 1:

(1 - 2 * Storno) * Dauer as Wert

Я сомневаюсь, что * -1 это ваша проблема, если нет необычногосимвол в строке.

Ошибка индекса 1 вне диапазона из-за java , а не SQL .Это указывает на ошибку в запросе, где он не может быть запущен. Вы должны проверить ошибку, возвращающуюся из базы данных, чтобы увидеть, что происходит.

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