sql >> Database >  >> RDS >> PostgreSQL

Hoe zorg ik ervoor dat Java &Postgres-enums samenwerken voor update?

Behandel vanuit het oogpunt van JDBC de PostgreSQL-enum gewoon als een tekenreeks.

Citeren van blog Converteer tussen Java-opsommingen en PostgreSQL-opsommingen:

Met PostgreSQL kunt u enum-typen maken met behulp van de volgende syntaxis:

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

U kunt nu 'dier' ​​als datatype gebruiken in uw tabellen, bijvoorbeeld:

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

In Java zou je een corresponderend opsommingstype hebben:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

Het converteren tussen Java- en PostgreSQL-opsommingen is eenvoudig. Als u bijvoorbeeld een enumveld wilt invoegen of bijwerken, kunt u de CAST-syntaxis in uw SQL PreparedStatement gebruiken:

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, ?);

Met Postgres kun je ook een opsomming invoegen/bijwerken door de waarde ervan als een tekenreeks door te geven.

Of je nu cast of niet, de Java-kant is hetzelfde. U zou de velden als volgt instellen:

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

Het ophalen van de enum uit een SELECT-statement ziet er als volgt uit:

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

Houd er rekening mee dat enums hoofdlettergevoelig zijn, dus er moet rekening worden gehouden met eventuele niet-overeenkomende hoofdletters tussen uw Postgres-enums en Java-enums. Merk ook op dat het PostgreSQL-enumtype niet-standaard SQL is, en dus niet overdraagbaar.



  1. MySQL, beter om NULL of lege string in te voegen?

  2. SQLite JSON_TYPE()

  3. PHP:meerdere SQL-query's in één mysql_query-statement

  4. ORA-12557 TNS:protocoladapter niet laadbaar