Java prepareStatement设置

时间:2013-08-15 15:34:47

标签: java jdbc prepared-statement

我准备了这样的声明:

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

我该怎么做?

2 个答案:

答案 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);

也许是存储过程的东西。