java enum和postgresql枚举

时间:2013-05-10 23:57:08

标签: java postgresql

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());

2 个答案:

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