我准备了这样的声明:
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
我该怎么做?
答案 0 :(得分:1)
我认为你必须使用字符串连接等来构建模板语句,并记录你想要插入的参数(在一个对象数组中?)。
然后遍历每一个并执行setString()
等。您无法使用PreparedStatement
插入任意SQL(它会有效地击败PreparedStatement
之一好处,即将SQL构造限制为自定义参数)
答案 1 :(得分:0)
您可以设置使用Calendar计算的java.sql.Date,如SQL所示。
否则 - 如果可以枚举要填充的表达式,则可以使用SQL CASE表达式切换选项号:
CASE ? WHEN 1 THEN add_months(current_date,-12)
WHEN 2 THEN trunc(sysdate, 'YEAR')
END
query.setInt(choice);
也许是存储过程的东西。