Från JDBC:s synvinkel, behandla bara PostgreSQL enum som en sträng.
Citerar bloggen Konvertera mellan Java-enums och PostgreSQL-enums:
PostgreSQL låter dig skapa enumtyper med hjälp av följande syntax:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Du kan nu använda "djur" som en datatyp i dina tabeller, till exempel:
create table pet ( pet_id integer not null, pet_type animal_type not null, name varchar(20) not null );
I Java skulle du ha en motsvarande enumtyp:
public enum AnimalType { DOG, CAT, SQUIRREL; }
Att konvertera mellan Java- och PostgreSQL-enums är enkelt. Till exempel, för att infoga eller uppdatera ett enumfält kan du använda CAST-syntaxen i din SQL PreparedStatement:
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 låter dig också infoga/uppdatera en enum bara genom att skicka dess värde som en sträng.
Oavsett om du castar eller inte, är Java-sidan densamma. Du skulle ställa in fälten så här:
stmt.setInt(1, 1); stmt.setString(2, AnimalType.DOG.toString()); stmt.setString(3, 'Rex');
Att hämta enum från en SELECT-sats ser ut så här:
AnimalType.valueOf(stmt.getString("pet_type"));
Tänk på att enums är skiftlägeskänsliga, så eventuella fallfelmatchningar mellan dina Postgres-enums och Java-enums måste tas med i beräkningen. Observera också att PostgreSQL-enumtypen är icke-standard SQL och därför inte portabel.