«Индекс параметров вне диапазона (2> количество параметров, равное 1).»для оператора с двумя параметрами - PullRequest
0 голосов
/ 18 декабря 2018

Я слежу за этим уроком, чтобы узнать о Spring JdbcTemplate, и у него есть следующий пример, который прекрасно работает:

public void deleteDog(String name, Long id) {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.update("DELETE FROM dog WHERE name='" + name + "' AND id=" + id);
}

Но это похоже на уязвимость SQL Injection, поэтому я пытаюсь переписатьэто выглядит следующим образом:

public void deleteDog(String name, Long id) {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.update("DELETE FROM dog WHERE name='?' AND id=?", name, id);
}

Теперь я получаю «Индекс параметров вне диапазона (2> количество параметров, равное 1)».Но он явно имеет два знака вопроса для параметров в операторе DELETE ... Кроме того, обновление из того же учебника прекрасно работало в этом стиле с тремя параметрами:

    jdbcTemplate.update("INSERT INTO dog(name, rescued, vaccinated) VALUES (?, ?, ?)",
            name, rescued, vaccinated);

Так что не похоже, что я 'Я неправильно использую метод обновления с несколькими параметрами.Что я тут недопонимаю?

1 Ответ

0 голосов
/ 18 декабря 2018

Удалить ' окружающие символы при использовании аргументов PreparedStatement:

public void deleteDog(String name, Long id) {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.update("DELETE FROM dog WHERE name=? AND id=?", name, id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...