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();
但我也想逃避天。
答案 0 :(得分:6)
将"+ days +"
替换为?
,将setInt
更改为2而不是1并添加
preparedStatement.setWhateverTypeDaysIs(1, days);
答案 1 :(得分:0)
最好的解决方案是传递一个int参数乘以固定间隔,例如
select * from foo where (time + ? * INTERVAL '1' DAY) > current_timestamp
您可以放几天,几个小时...
而不是setInt
参数
答案 2 :(得分:0)
您可以在SQL文本中使用?::interval
,并像这样使用setString()
setString(1, "30 minutes")