Z pohledu JDBC prostě zacházejte s výčtem PostgreSQL jako s řetězcem.
Cituji blog Převod mezi výčty Java a výčty PostgreSQL:
PostgreSQL vám umožňuje vytvářet typy výčtů pomocí následující syntaxe:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Nyní můžete ve svých tabulkách použít jako datový typ ‚zvíře‘, například:
create table pet ( pet_id integer not null, pet_type animal_type not null, name varchar(20) not null );
V Javě byste měli odpovídající typ výčtu:
public enum AnimalType { DOG, CAT, SQUIRREL; }
Převod mezi výčty Java a PostgreSQL je přímočarý. Chcete-li například vložit nebo aktualizovat pole výčtu, můžete použít syntaxi CAST ve svém 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 vám také umožní vložit/aktualizovat výčet pouhým předáním jeho hodnoty jako řetězce.
Ať už casting nebo ne, Java strana je stejná. Pole byste nastavili takto:
stmt.setInt(1, 1); stmt.setString(2, AnimalType.DOG.toString()); stmt.setString(3, 'Rex');
Načtení výčtu z příkazu SELECT vypadá takto:
AnimalType.valueOf(stmt.getString("pet_type"));
Vezměte v úvahu, že ve výčtech se rozlišují velká a malá písmena, takže bude třeba vzít v úvahu jakékoli neshody malých a velkých písmen mezi vašimi výčty Postgres a výčty Java. Všimněte si také, že typ výčtu PostgreSQL je nestandardní SQL, a proto není přenosný.