7
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 的数据插入客户数据,但出现错误,例如 ERROR: column "gender" is of type gender but expression is of type character varying 提示:您将需要重写或强制转换表达式。

我的 Java 代码如下所示:

PreparedStatement pre_state;

public enum gendertype {
    F,
    M;
}

pre_state = conn.prepareStatement("INSERT INTO"
            + " customers VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
pre_state.set(6, gendertype.F.toString());
4

2 回答 2

12

因为您已经解决了这个答案,所以我不能相信这个答案,但我会解释它为什么会起作用。

PostgreSQL 在说的时候提供了答案

提示:您需要重写或转换表达式

Java 代码正在创建一个表示 Java 枚举性别类型的字符串文字值。

将文字转换为 PostgreSQL 性别类型是通过将转换后缀添加到 value 来完成的::gender

所以有效的输入将是

'F'::gender

或者

'M'::gender

这是有效的,因为所有 PostgreSQL 类型都有一个输入法,该输入法采用文本表示并将其转换为内部形式。

于 2013-05-11T11:49:32.920 回答
1

你的解决方案是

pre_state.setObject(6, gendertype.F.toString(), Types.OTHER);
于 2020-03-17T15:57:22.467 回答