使用PreparedStatement java PostgreSQL更新ENUM值

时间:2016-11-20 18:17:13

标签: java sql postgresql enums prepared-statement

我有一个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 = ?::positionposition = CAST(? AS position),但我总是得到同样的错误。 请帮我管理

3 个答案:

答案 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);