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

Hvordan får jeg Java- og Postgres-enums til at fungere sammen til opdatering?

Fra JDBC's synspunkt skal du bare behandle PostgreSQL enum som en streng.

Citerer blog Konverter mellem Java enums og PostgreSQL enums:

PostgreSQL giver dig mulighed for at oprette enum-typer ved hjælp af følgende syntaks:

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

Du kan nu bruge 'dyr' som datatype i dine tabeller, for eksempel:

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

I Java vil du have en tilsvarende enum-type:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

Konvertering mellem Java og PostgreSQL enums er ligetil. For at indsætte eller opdatere et enum-felt kan du f.eks. bruge CAST-syntaksen 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 vil også lade dig indsætte/opdatere en enum blot ved at overføre dens værdi som en streng.

Uanset om du kaster eller ej, er Java-siden den samme. Du ville indstille felterne sådan her:

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

Hentning af enum fra en SELECT-sætning ser sådan ud:

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

Tag i betragtning, at der skelnes mellem store og små bogstaver i enums, så der skal tages højde for eventuelle uoverensstemmelser mellem dine Postgres-enums og Java-enums. Bemærk også, at PostgreSQL enum-typen er ikke-standard SQL og derfor ikke bærbar.



  1. Sådan trækkes data fra databasen og se dem som en ListView

  2. Almindelige tabeludtryk:Hvornår og hvordan man bruger dem

  3. Rutinemæssige anbefalinger til sikkerhedskopiering af indhold

  4. Forsøg på at eksportere et Oracle via PL/SQL giver en dato på 0000-00-00