Java prepareStatement设置

Java prepareStatement设置,java,jdbc,prepared-statement,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)"); 但我想让它像这样: WHERE TRADE_DATE >= TRUNC(add_months(current_date,-12)) WHERE TRADE_DATE >

我准备了这样的声明:

WHERE  TRADE_DATE >= TRUNC(add_months(current_date,-12))
WHERE  TRADE_DATE >= TRUNC(?)
query.setString(1,"add_months(current_date,-12)");
但我想让它像这样:

WHERE  TRADE_DATE >= TRUNC(add_months(current_date,-12))
WHERE  TRADE_DATE >= TRUNC(?)
query.setString(1,"add_months(current_date,-12)");
然后按如下方式设置值:

WHERE  TRADE_DATE >= TRUNC(add_months(current_date,-12))
WHERE  TRADE_DATE >= TRUNC(?)
query.setString(1,"add_months(current_date,-12)");

然而,我得到了错误的说法

inconsistent datatypes: expected DATE got NUMBER

我该怎么做呢?

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


然后遍历每一个语句并执行
setString()
等操作。您不能使用
PreparedStatement
插入任意SQL(这将有效地挫败
PreparedStatement
的一个优点,即将SQL构造限制为自定义参数)

您可以像sql一样设置使用日历计算的java.sql.Date

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

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

query.setInt(choice);

可能是一个存储过程。

您不能用
setDate
来传递
Date
值吗?我不认为你能以你在这里尝试的方式做到这一点。。。