我有一个SQL Enum:
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:语法错误。
我也试过position = ?::position
或position = CAST(? AS position)
,但我总是得到同样的错误。
请帮我管理
答案 0 :(得分:2)
在演员阵容时,你需要引用你的枚举名称:
PreparedStatement stmt = con.prepareStatement("update players set position = ?::\"position\" where id = 1");
语法错误正在发生,因为POSITION是一个关键字。用双引号括起来强制postgres将其解析为标识符。
为枚举使用不同的名称可能是个好主意。
答案 1 :(得分:1)
这是因为position是已在Postgres中声明的函数。请使用任何不同的名称。不需要铸造。
答案 2 :(得分:0)
您尝试过
ps.setObject(1, "W", Types.OTHER);