繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM