在查询中使用带间隔的 prepareStatement 时出错

Getting error when using prepareStatement with interval in query

当 运行 在 prepareStatementSELECT SYSDATE + INTERVAL '7' DAY FROM DUAL; 查询

    PreparedStatement ps =  connection.prepareStatement("select sysdate + interval ? day from dual" );      
    ps.setString(1, "7");
    ps.executeQuery();

它会抛出一个异常,语法不好,很明显,因为我能够 运行 在 sql-developer 中进行相同的查询。

这是 PreparedStatement 中的错误吗?我可以将准备好的语句与间隔一起使用吗?

整个表达式INTERVAL '7' DAY是一个文字,不能简单地用变量(参数)替换其中的一部分。请改用函数 NUMTODSINTERVAL(?,'DAY')

PreparedStatement 不适用于区间文字,因此 setInt 和 setString 都不起作用! http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm

因此,如果您想动态更改查询中的日期(使用间隔文字),唯一的方法是连接该值。

在你的例子中:

int yourDays = 7;
String query ="select sysdate + interval '" + yourDays + "' day from dual ";

然后如果需要添加其他参数并执行查询,则可以使用 PreparedStatement。

如果你传递一个整数参数乘以一个固定的间隔,它就会起作用例如

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

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