Java PreparedStatement设置间隔

时间:2015-11-12 12:35:26

标签: java postgresql prepared-statement

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();

但我也想逃避

3 个答案:

答案 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")