'Parameter index out of range (2 > number of parameters, which is 1).' 对于两个参数语句
'Parameter index out of range (2 > number of parameters, which is 1).' for a two parameter statement
我正在按照本教程学习 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);
}
现在我得到 'Parameter index out of range (2 > number of parameters, which is 1).' 但它显然在 DELETE 语句中有两个问号参数......同样来自同一教程的更新在具有三个参数的那种风格中工作得很好:
jdbcTemplate.update("INSERT INTO dog(name, rescued, vaccinated) VALUES (?, ?, ?)",
name, rescued, vaccinated);
所以看起来我没有误用具有多个参数的更新方法。我在这里误解了什么?
使用 PreparedStatement 的参数时删除 '
周围的字符:
public void deleteDog(String name, Long id) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("DELETE FROM dog WHERE name=? AND id=?", name, id);
}
我正在按照本教程学习 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);
}
现在我得到 'Parameter index out of range (2 > number of parameters, which is 1).' 但它显然在 DELETE 语句中有两个问号参数......同样来自同一教程的更新在具有三个参数的那种风格中工作得很好:
jdbcTemplate.update("INSERT INTO dog(name, rescued, vaccinated) VALUES (?, ?, ?)",
name, rescued, vaccinated);
所以看起来我没有误用具有多个参数的更新方法。我在这里误解了什么?
使用 PreparedStatement 的参数时删除 '
周围的字符:
public void deleteDog(String name, Long id) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update("DELETE FROM dog WHERE name=? AND id=?", name, id);
}