PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a far funzionare insieme le enumerazioni Java e Postgres per l'aggiornamento?

Dal punto di vista di JDBC, tratta semplicemente l'enumerazione PostgreSQL come una stringa.

Blog di citazioni Converti tra enumerazioni Java e enumerazioni PostgreSQL:

PostgreSQL ti consente di creare tipi enum utilizzando la seguente sintassi:

CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');

Ora puoi utilizzare "animale" come tipo di dati nelle tue tabelle, ad esempio:

create table pet (                         
    pet_id        integer         not null,
    pet_type      animal_type     not null,
    name          varchar(20)     not null
);

In Java, avresti un tipo enum corrispondente:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

La conversione tra enumerazioni Java e PostgreSQL è semplice. Ad esempio, per inserire o aggiornare un campo enum è possibile utilizzare la sintassi CAST nella propria 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 ti consentirà anche di inserire/aggiornare un enum semplicemente passando il suo valore come stringa.

Indipendentemente dal casting o meno, il lato Java è lo stesso. Imposteresti i campi in questo modo:

stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');

Il recupero dell'enumerazione da un'istruzione SELECT è simile al seguente:

AnimalType.valueOf(stmt.getString("pet_type"));

Tieni presente che le enumerazioni fanno distinzione tra maiuscole e minuscole, quindi è necessario tenere conto di eventuali discrepanze tra le enumerazioni Postgres e le enum Java. Si noti inoltre che il tipo enum PostgreSQL non è SQL standard e quindi non portabile.