0

我准备了这样的声明:

WHERE  TRADE_DATE >= TRUNC(add_months(current_date,-12))

但我想要这样:

WHERE  TRADE_DATE >= TRUNC(?)

然后像这样设置值:

query.setString(1,"add_months(current_date,-12)");

或者

query.setString(1,"trunc(sysdate, 'YEAR')");

但是,我收到错误消息

inconsistent datatypes: expected DATE got NUMBER

我怎样才能做到这一点?

4

2 回答 2

1

我认为您必须使用字符串连接等构建模板语句,并记录您希望插入的参数(在对象数组中?)。

然后遍历每一个并执行您的setString()等。您不能使用插入任意 SQL PreparedStatement(这将有效地破坏PreparedStatement的好处之一,即限制 SQL 构造以自定义参数)

于 2013-08-15T15:38:41.283 回答
0

您可以像 SQL 一样设置使用 Calendar 计算的 java.sql.Date。

否则 - 如果可以枚举要填写的表达式,则可以使用 SQL CASE 表达式切换选项编号:

CASE ? WHEN 1 THEN add_months(current_date,-12)
       WHEN 2 THEN trunc(sysdate, 'YEAR')
END

query.setInt(choice);

也许是存储过程的东西。

于 2013-08-15T15:48:39.110 回答