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
值吗?我不认为你能以你在这里尝试的方式做到这一点。。。