在Java中以字符串形式传递Oracle函数
我有一个这样的问题在Java中以字符串形式传递Oracle函数,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我有一个这样的问题 String query = "UPDATE tbl_customer_policies SET "+ "start_date = ?," + "next_pay_date = ?,"+ "maturity_date = ?, " + "modified_at = CURRENT_TIMESTAMP,"+ "modifier = ?, status = ? " + "WHER
String query = "UPDATE tbl_customer_policies SET "+
"start_date = ?," +
"next_pay_date = ?,"+
"maturity_date = ?, " +
"modified_at = CURRENT_TIMESTAMP,"+
"modifier = ?, status = ? " +
"WHERE id = ?";
现在代替start\u date
的占位符,我想传递一个类似SYSDATE
的字符串
我现在要做的是在名为string startDate=“SYSDATE”
的变量中设置该字符串,并将其绑定到该占位符。但我想它似乎不起作用。我得到这个例外
ORA-01858:在需要数字的位置找到非数字字符
我必须通过这样的Oracle函数。如何实现这一点?如果它总是
sysdate
,则无需对其进行参数化。
直接在查询中设置它,如下所示:
String query = "UPDATE tbl_customer_policies SET "+
"start_date = sysdate," + // or "start_date = ADD_MONTHS(SYSDATE, 12),"
"next_pay_date = ?,"+
"maturity_date = ?, " +
"modified_at = CURRENT_TIMESTAMP,"+
"modifier = ?, status = ? " +
"WHERE id = ?";
并像以前一样设置所有其他参数。使用函数设置日期()
比如说
"UPDATE tbl_customer_policies SET "+
"start_date = TO_DATE(?, 'DD-MON-RR')," +
"next_pay_date = TO_DATE(?, 'DD-MON-RR'),"+
在这种情况下,不要忘记以“98年10月27日”等格式传递参数
附言。
我误解了这个问题,所以试着纠正我的答案
所描述的问题是由于PreparedStatement Java类的限制。
PreparedStatement对象用于存储对某些预编译(和优化)SQL语句的引用。因此,您必须只提供用于填充它们的参数值。 函数必须在使用其结果之前进行评估,并且不能将其放置在那里 我想您可以使用Oracle结构化类型的变通方法。 可以使用PreparedStatement的setRef()方法将它们作为引用类型传递。 使用函数可以通过对象构造函数中的包装器实现。
我没有试过,但在我看来这是一个可能的解决办法 好吧,你不能。它必须在查询本身中,而不是在其参数中。实际上,我希望数据库本身能够处理日期计算。我不是用java来处理这个问题,我只是想用db函数来执行这个逻辑,就像<代码>添加月份(系统日期,12)。有了它,我就不必用java进行日期处理了。它不会总是
sysdate
。根据条件,它可以改变。因此,要么你有一组SQL查询,你可以从中改变,要么你可以从SQL查询中调用一个存储过程,但这似乎有点过分了。这不是我问题的答案。再读一遍。我知道我可以使用将其传递到\u DATE
。我在问是否可以将该函数用作字符串,将其存储在变量中并传递。@pjp很抱歉-我知道您无法确定错误ORA-01858的问题。请参见我的第二次尝试:)