[英]Getting error when using prepareStatement with interval in query
运行此查询时SELECT SYSDATE + INTERVAL '7' DAY FROM DUAL;
在这样的prepareStatement
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。
如果您传递一个 int 参数乘以固定间隔 Eg,它将起作用
select * from foo where (time + ? * INTERVAL '1' DAY) > current_timestamp
你可以放几天、几小时……而不是setInt
参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.