CREATE TABLE customers
(
first_name character varying(15),
second_name character varying(20),
login character varying(15) NOT NULL,
password character varying(15),
email character varying(40),
gender gender,
register_date date,
date_of_birth date,
address character varying(40),
address_number integer,
town character varying(20),
CONSTRAINT login PRIMARY KEY (login)
)
我有这张桌子,我创建了一个性别枚举,例如:
CREATE TYPE gender AS ENUM ( 'F', 'M',);
我正在尝试使用PreparedStatement从eclipse java插入客户数据 但是有一个错误,如错误:列"性别"属于性别类型,但表达式具有不同类型的字符 提示:您需要重写或转换表达式。
我的Java代码如下:
PreparedStatement pre_state;
public enum gendertype {
F,
M;
}
pre_state = conn.prepareStatement("INSERT INTO"
+ " customers VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
pre_state.set(6, gendertype.F.toString());
答案 0 :(得分:6)
由于你已经解决了这个问题,我不能相信这个答案,但我会解释它的工作原理。
PostgreSQL在提到
时提供了答案提示:您需要重写或转换表达式
Java代码正在创建一个字符串文字值,表示Java enum gendertype类型。
将文字转换为PostgreSQL性别类型是通过向值::gender
添加转换后缀来完成的。
所以有效的输入是
'F'::gender
或
'M'::gender
这是有效的,因为所有PostgreSQL类型都有一个输入方法,它接受文本表示并将其转换为内部表单。
答案 1 :(得分:0)
您的解决方案应该是
pre_state.setObject(6, gendertype.F.toString(), Types.OTHER);