Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PreparedStatement java PostgreSQL更新枚举值_Java_Sql_Postgresql_Enums_Prepared Statement - Fatal编程技术网

使用PreparedStatement java PostgreSQL更新枚举值

使用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

我有一个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.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);