Java PreparedStatement 设置间隔

Java PreparedStatement set interval

sql 语句中 interval 的正确转义是什么?

目前我有以下代码转义 customerId 变量:

final String query = "delete from login_history where time < current_timestamp - '" + days + " days'::interval and customer_id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setInt(1, customerId);
int deleted = preparedStatement.executeUpdate();

不过我也想逃.

"+ days +" 替换为 ?,将 setInt 更改为 2 而不是 1 并添加

preparedStatement.setWhateverTypeDaysIs(1, days);

最好的解决方案是传递一个乘以固定间隔的int参数,例如

select * from foo where (time + ? * INTERVAL '1' DAY) > current_timestamp

您可以输入天数、小时数... 并且比 setInt 参数

您可以在 SQL 文本中使用 ?::interval 并像

一样使用 setString()
setString(1, "30 minutes")