Я слежу за этим уроком, чтобы узнать о 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);
Так что не похоже, что я 'Я неправильно использую метод обновления с несколькими параметрами.Что я тут недопонимаю?