JDBC查询失败,但它从pgAdmin运行

时间:2012-08-22 16:13:43

标签: java jdbc

我有一个奇怪的问题。我的代码中有一个更新查询,我从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中执行时没有问题。

我缺少什么?

2 个答案:

答案 0 :(得分:0)

不要使用'6天':: interval ,而是使用正确的CAST(): CAST('6天'AS间隔)

答案 1 :(得分:0)

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