Postgresql

數據庫包裝設計問題:沒有運算符與給定名稱和參數類型匹配

  • August 4, 2017

我正在使用AWS 的 Lambda函式 Java 建構一個用於數據庫訪問的包裝器,我遇到的問題是 Lambda 參數是 JSON,因此是無類型的,因此所有傳入的參數都被 de-JSON 轉換為字元串,並且在將它們添加到 使用setObject (param, value) 方法的PreparedStatement他們都被視為使用setString (param, value),這對於字元串和數字來說很好,但是當涉及時間戳或日期的參數時,我們得到一個參數類型不匹配,如下所示:

org.postgresql.util.PSQLException: operator does not exist: timestamp with time zone >= character varying
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

我知道將參數類型作為 JSON 的額外欄位傳遞可能會有所幫助,但我擔心額外的成本以及手動將參數類型添加到 JSON 的需要,因為它目前正在“自動”建構從底層 DTO 使用GSON

誰能想出一種不同的方法,也許是在將參數傳遞給 PreparedStatement 時。

您需要將日期時間字元串顯式轉換為適當的數據類型。由於您選擇不包含有問題的 SQL 語句,我只能猜測它是什麼樣的,但如果它看起來像

...WHERE timestamp_column > ?...

您需要將其替換為

...WHERE timestamp_column > TO_TIMESTAMP(?, 'YYYY-MM-DD HH24:MI:SS')...

當然,使用適當的格式字元串。

引用自:https://dba.stackexchange.com/questions/182745