Z punktu widzenia JDBC, po prostu traktuj wyliczenie PostgreSQL jak ciąg.
Cytujący blog Konwertuj między wyliczeniami Java i wyliczeniami PostgreSQL:
PostgreSQL umożliwia tworzenie typów wyliczeniowych przy użyciu następującej składni:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Możesz teraz używać „zwierzę” jako typu danych w swoich tabelach, na przykład:
create table pet (
pet_id integer not null,
pet_type animal_type not null,
name varchar(20) not null
);
W Javie masz odpowiedni typ wyliczenia:
public enum AnimalType {
DOG,
CAT,
SQUIRREL;
}
Konwersja między wyliczeniami Java i PostgreSQL jest prosta. Na przykład, aby wstawić lub zaktualizować pole wyliczenia, możesz użyć składni CAST w swoim 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 umożliwia również wstawianie/aktualizowanie wyliczenia, po prostu przekazując jego wartość jako ciąg.
Niezależnie od tego, czy przesyłasz, czy nie, strona Java jest taka sama. Możesz ustawić pola w ten sposób:
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');
Pobieranie wyliczenia z instrukcji SELECT wygląda tak:
AnimalType.valueOf(stmt.getString("pet_type"));
Weź pod uwagę, że w wyliczeniach rozróżniana jest wielkość liter, więc wszelkie niezgodności wielkości liter między wyliczeniami Postgres i wyliczeniami Java będą musiały zostać uwzględnione. Zauważ również, że typ wyliczenia PostgreSQL jest niestandardowym SQL, a zatem nie jest przenośny.