我正在按照本教程学习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注入漏洞,所以我尝试将其重写如下:
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);
因此,看起来好像我在误用带有多个参数的update方法。我在这里误会什么?
答案 0 :(得分:0)
使用PreparedStatement的参数时删除'
周围的字符:
public void deleteDog(String name, Long id) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("DELETE FROM dog WHERE name=? AND id=?", name, id);
}