PostgreSQL允许您使用以下语法创建枚举类型:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
现在,您可以在表中使用“动物”作为数据类型,例如:
create table pet (
pet_id integer not null,
pet_type animal_type not null,
name varchar(20) not null
);
在Java中,您将拥有相应的枚举类型:
public enum AnimalType {
DOG,
CAT,
SQUIRREL;
}
在Java和PostgreSQL枚举之间转换很简单。例如,要插入或更新枚举字段,可以在 SQL PreparedStatement 中使用 CAST 语法:
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, CAST(? AS animal_type), ?);
--or
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, ?::animal_type, ?);
Postgres还允许您通过将其值作为字符串传递来插入/更新枚举。
无论是否强制转换,Java端都是一样的。您可以像这样设置字段:
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');
从 SELECT 语句中检索枚举如下所示:
AnimalType.valueOf(stmt.getString("pet_type"));
考虑到枚举区分大小写,因此必须考虑 Postgres 枚举和 Java 枚举之间的任何大小写不匹配。另请注意,PostgreSQL枚举类型是非标准SQL,因此不可移植。