Behandel vanuit het oogpunt van JDBC de PostgreSQL-enum gewoon als een tekenreeks.
Citeren van blog Converteer tussen Java-opsommingen en PostgreSQL-opsommingen:
Met PostgreSQL kunt u enum-typen maken met behulp van de volgende syntaxis:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
U kunt nu 'dier' als datatype gebruiken in uw tabellen, bijvoorbeeld:
create table pet (
pet_id integer not null,
pet_type animal_type not null,
name varchar(20) not null
);
In Java zou je een corresponderend opsommingstype hebben:
public enum AnimalType {
DOG,
CAT,
SQUIRREL;
}
Het converteren tussen Java- en PostgreSQL-opsommingen is eenvoudig. Als u bijvoorbeeld een enumveld wilt invoegen of bijwerken, kunt u de CAST-syntaxis in uw SQL PreparedStatement gebruiken:
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, ?);
Met Postgres kun je ook een opsomming invoegen/bijwerken door de waarde ervan als een tekenreeks door te geven.
Of je nu cast of niet, de Java-kant is hetzelfde. U zou de velden als volgt instellen:
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');
Het ophalen van de enum uit een SELECT-statement ziet er als volgt uit:
AnimalType.valueOf(stmt.getString("pet_type"));
Houd er rekening mee dat enums hoofdlettergevoelig zijn, dus er moet rekening worden gehouden met eventuele niet-overeenkomende hoofdletters tussen uw Postgres-enums en Java-enums. Merk ook op dat het PostgreSQL-enumtype niet-standaard SQL is, en dus niet overdraagbaar.