2012-08-22 23 views
0

我有一個奇怪的問題。我在我的代碼中有一個更新查詢,我從Java應用程序運行。 我有一個PreparedStatement,爲此我傳遞了2個java.sql.Date參數。當我運行查詢,它記錄此異常:JDBC查詢失敗,雖然它從pgAdmin運行

 
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

我想我可以通過計算java中的前6天並將其傳遞給查詢來解決此問題。所以我認爲「created_date> =(date'2012-08-22 +02:00:00' - '6 day':: interval)」部分是失敗的,只是看不到如何以及爲什麼。 –

+0

您是否使用了準備好的語句和佔位符?如果是這樣,它是如何構成的,即你是否在查詢文本中說'?:: interval'? – araqnid

+0

請顯示您發送到PgJDBC的JDBC代碼和原始查詢文本。 –

回答

0

不要使用'6一天::區間,但適當的CAST():CAST('6一天AS間隔)

+0

同樣的結果,同樣的例外。 –