我有一个奇怪的问题。我的代码中有一个更新查询,我从Java应用程序运行。 我有一个PreparedStatement,我传递了2个java.sql.Date参数。当我运行查询时,它会记录此异常:
DatabaseObject - Failed to execute update query: UPDATE data_cache_cycle_data dc SET last_7days_receipts = sq.x FROM (SELECT asin,count(asin) as x FROM inventory WHERE created_date = (date '2012-08-22 +02:00:00' - '6 day'::interval) GROUP BY asin ) AS sq WHERE dc.asin = sq.asin . org.postgresql.util.PSQLException: ERROR: syntax error at or near "$2" Position: 177 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:332)
现在,如果我从异常日志中复制粘贴查询,则查询在pgAdmin中执行时没有问题。
我缺少什么?
答案 0 :(得分:0)
不要使用'6天':: interval ,而是使用正确的CAST(): CAST('6天'AS间隔)
答案 1 :(得分:0)
':'在jdbc中是命名参数的占位符。
https://www.javaworld.com/article/2077706/core-java/named-parameters-for-preparedstatement.html
你可能必须找到逃脱它的方法。
在休眠中,我们使用反斜杠' \'逃避':'。如果它不起作用找到逃脱它的方法,因为肯定应该有办法做到这一点。