我正在处理 Java 中的 NamedParameterJdbcTemplate。我正在尝试通过 NamedParameterJdbcTemplate 将间隔参数(3 个月)传递给 sql 查询 DELETE FROM message WHERE dt_log <NOW () - INTERVAL ': period'; 我在 DAO 中为间隔参数传递了一个字符串类型的句点,并将其放入 mapSqlParameterSource.addValue ("period", period); 执行请求时,它会抛出以下错误:org.postgresql.util.PSQLException: ERROR: invalid input syntax for type interval: ': period',尽管我传递了正确的值“3 个月”(检查了整个请求pgAdmin)。我尝试以相同的方式将 PGInterval 对象传递给参数,但它给出了相同的错误。但是如果你不插入参数,请求本身就会起作用,但只需手动编写请求本身的时间间隔:'3 个月',如果您插入指向具有字符串类型的静态值的链接,其中在 sql 请求中指定了“3 个月”,则它可以工作。DAO 类代码如下所示。
private final String DELETE_OLD_ROWS = "DELETE FROM mood.message WHERE dt_log <NOW() - INTERVAL ':period';";
@Override
public void delete_old_records(String period) {
MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource();
mapSqlParameterSource.addValue("period", period);
this.getNamedParameterJdbcTemplate().update(this.DELETE_OLD_ROWS, mapSqlParameterSource);
}
也许有人可以告诉我我做错了什么?)