簡體   English   中英

使用 PreparedStatement java PostgreSQL 更新 ENUM 值

[英]Update ENUM value with PreparedStatement java PostgreSQL

我有一個 SQL 枚舉:

CREATE TYPE position as ENUM ('G','W','D');

我需要使用 java PreparedStatement 更新這個值。 我試圖這樣做:

PreparedStatement ps = connection.prepareStatement("UPDATE players 
SET position = ? WHERE id = 1");

ps.setString(1, "W");

但是我得到一個org.postgresql.util.PSQLException : ERROR: syntax error at or near "position"。

我也試過position = ?::positionposition = CAST(? AS position)但我總是得到同樣的錯誤。 請幫我解決這個問題

投射時需要引用枚舉的名稱:

        PreparedStatement stmt = con.prepareStatement("update players set position = ?::\"position\" where id = 1");

發生語法錯誤是因為 POSITION 是關鍵字。 將它用雙引號括起來會強制 postgres 將其解析為標識符。

為枚舉使用不同的名稱可能是個好主意。

這是因為 position 是一個已經在 Postgres 中聲明的函數。 請使用任何不同的名稱。 不需要鑄造。

你有沒有試過這個

ps.setObject(1, "W", Types.OTHER);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM