[英]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 = ?::position
或position = 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.