PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment faire en sorte que les énumérations Java et Postgres fonctionnent ensemble pour la mise à jour ?

Du point de vue de JDBC, traitez simplement l'énumération PostgreSQL comme une chaîne.

Citant le blog Convertir entre les énumérations Java et les énumérations PostgreSQL :

PostgreSQL vous permet de créer des types enum en utilisant la syntaxe suivante :

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

Vous pouvez désormais utiliser "animal" comme type de données dans vos tables, par exemple :

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

En Java, vous auriez un type enum correspondant :

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

La conversion entre les énumérations Java et PostgreSQL est simple. Par exemple, pour insérer ou mettre à jour un champ enum, vous pouvez utiliser la syntaxe CAST dans votre 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 vous permettra également d'insérer/mettre à jour une énumération en passant simplement sa valeur sous forme de chaîne.

Qu'il s'agisse de casting ou non, le côté Java est le même. Vous définiriez les champs comme ceci :

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

La récupération de l'énumération à partir d'une instruction SELECT ressemble à ceci :

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

Tenez compte du fait que les énumérations sont sensibles à la casse, de sorte que toute incompatibilité de casse entre vos énumérations Postgres et Java devra être prise en compte. Notez également que le type d'énumération PostgreSQL est un SQL non standard, et donc non portable.