【问题标题】:java enum and postgresql enumjava枚举和postgresql枚举
【发布时间】:2013-05-10 23:57:08
【问题描述】:
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());

【问题讨论】:

  • 可能是插入为'F'::text,会导致报错。
  • 好的,我找到了解决方案,它可以工作
  • pre_state=main.conne.conn.prepareStatement("插入客户值 (?,?,?,?,?,?::gender,?,?,?,?,?)" );
  • pre_state.setString(6,gendertype.F.toString());
  • 请考虑为gender 添加Other 和/或unspecified 值。性别不仅仅是两个价值观。你有基因 XXY 个体,发育双性个体等。就像假设名字有“名字”和“姓氏”一样,这是需要消除的计算中的一个坏习惯。

标签: java postgresql


【解决方案1】:

由于您已经解决了这个答案,所以我不能相信这个答案,但我会解释它为什么有效。

PostgreSQL 在说

时提供了答案

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

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

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

所以有效的输入应该是

'F'::gender

'M'::gender

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

【讨论】:

    【解决方案2】:

    你的解决方案应该是

    pre_state.setObject(6, gendertype.F.toString(), Types.OTHER);
    

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 2020-05-21
      • 2020-08-17
      • 1970-01-01
      • 2010-12-10
      • 2018-04-11
      相关资源
      最近更新 更多