0

我有一个奇怪的问题。我的代码中有一个更新查询,它是从 Java 应用程序运行的。我有一个 PreparedStatement,为此我传递了 2 个 java.sql.Date 参数。当我运行查询时,它会记录此异常:

DatabaseObject - 无法执行更新查询: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 天'::interval) GROUP BY asin ) AS sq WHERE dc.asin = sq.asin 。

org.postgresql.util.PSQLException:
错误:“$2”处或附近的语法错误

职位:177

    在 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2101)
    在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1834)
    在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:510)
    在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:386)
    在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:332)

现在,如果我从异常日志中复制粘贴查询,查询在 pgAdmin 中执行没有问题。

我错过了什么?

4

2 回答 2

0

不要使用'6 day'::interval,而是使用适当的 CAST(): CAST('6 day' AS interval)

于 2012-08-22T20:40:19.203 回答
0

jdbc 中的 ':' 是命名参数的占位符。
https://www.javaworld.com/article/2077706/core-java/named-parameters-for-preparedstatement.html
您可能必须找到一种方法来逃避它。在休眠中,我们使用反斜杠 '\' 来转义 ':'。如果它不起作用,请找到逃避它的方法,因为肯定应该有一种方法可以做到这一点。

于 2017-08-29T18:41:56.223 回答