使用PreparedStatement java PostgreSQL更新枚举值
我有一个SQL枚举:使用PreparedStatement java PostgreSQL更新枚举值,java,sql,postgresql,enums,prepared-statement,Java,Sql,Postgresql,Enums,Prepared Statement,我有一个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.p
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.psqleexception:错误:在“位置”处或附近出现语法错误
我还尝试了position=?::position
或position=CAST(?AS position)
但我总是得到相同的错误。
请帮我管理这个这是因为position是Postgres中已经声明的函数。请使用任何不同的名称。不需要强制转换。这是因为position是Postgres中已经声明的函数。请使用任何不同的名称。不需要强制转换。强制转换时,您需要引用枚举的名称:
PreparedStatement stmt = con.prepareStatement("update players set position = ?::\"position\" where id = 1");
发生语法错误,因为位置是关键字。用双引号将其括起来,迫使postgres将其解析为标识符
为枚举使用不同的名称可能是一个好主意。在强制转换时,您需要引用枚举的名称:
PreparedStatement stmt = con.prepareStatement("update players set position = ?::\"position\" where id = 1");
发生语法错误,因为位置是关键字。用双引号将其括起来,迫使postgres将其解析为标识符
为枚举使用不同的名称可能是个好主意。您尝试过这个吗
ps.setObject(1, "W", Types.OTHER);
你试过这个吗
ps.setObject(1, "W", Types.OTHER);