2016-11-20 48 views
0

更新ENUM值我有一个SQL枚举:与PreparedStatement的java的PostgreSQL的

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:错误:在语法错误或附近的“位置”。

我也试过position = ?::positionposition = CAST(? AS position)但我总是得到相同的错误。 请帮我管理

回答

2

你需要引用您枚举的名字,当你施放:

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

的语法错误发生,因为位置是关键字。用双引号括起来,强制postgres将其解析为一个标识符。

对枚举使用不同的名称可能是一个好主意。

1

这是因为position是一个已经在Postgres中声明的函数。请使用任何不同的名称。不需要铸造。