以下內容轉自:
https://blog.csdn.net/theonegis/article/details/41749773
PostgreSQL數據庫允許你使用如下的語法創建枚舉類型:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
創建以后就可以使用animal_type作為數據表中的數據類型,例如:
-
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中枚舉類型的轉換是很直接的。例如,要進行數據的插入或者更新,可以使用CAST語法在SQL 的PreparedStatement語句中這樣寫:
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, CAST(? AS animal_type), ?);
或者
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, ?::animal_type, ?);
注:這兩種SQL語句作用是一樣的。
PostgreSQL還可以允許你傳遞一個String類型的字符來進行對數據庫中枚舉類型數據的插入或者更新。
在Java端代碼都是一一樣的,你像下面一樣可以設置字段的值:
-
stmt.setInt(1, 1);
-
stmt.setString(2, AnimalType.DOG.toString());
-
stmt.setString(3, 'Rex');
從數據庫中提取枚舉枚舉類型的值也很簡單:
AnimalType.valueOf(stmt.getString("pet_type"));
考慮到枚舉類型時大小寫敏感的,所以你在PostgreSQL數據庫和Java嗲面中應該考慮到,做到大小寫統一。而且PostgreSQL中的enum枚舉類型不是標准的SQL類型所以不具有可移植性。
在PostgreSQL中參考枚舉類型的值,可以使用如下的查詢語句:
-
SELECT enumlabel FROM pg_enum
-
WHERE enumtypid = 'your_enum'::regtype ORDER BY oid;