sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur får jag Java &Postgres enums att fungera tillsammans för uppdatering?

Från JDBC:s synvinkel, behandla bara PostgreSQL enum som en sträng.

Citerar bloggen Konvertera mellan Java-enums och PostgreSQL-enums:

PostgreSQL låter dig skapa enumtyper med hjälp av följande syntax:

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

Du kan nu använda "djur" som en datatyp i dina tabeller, till exempel:

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

I Java skulle du ha en motsvarande enumtyp:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

Att konvertera mellan Java- och PostgreSQL-enums är enkelt. Till exempel, för att infoga eller uppdatera ett enumfält kan du använda CAST-syntaxen 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 låter dig också infoga/uppdatera en enum bara genom att skicka dess värde som en sträng.

Oavsett om du castar eller inte, är Java-sidan densamma. Du skulle ställa in fälten så här:

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

Att hämta enum från en SELECT-sats ser ut så här:

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

Tänk på att enums är skiftlägeskänsliga, så eventuella fallfelmatchningar mellan dina Postgres-enums och Java-enums måste tas med i beräkningen. Observera också att PostgreSQL-enumtypen är icke-standard SQL och därför inte portabel.



  1. 3 sätt att få schemat för en resultatuppsättning i SQL Server

  2. Hur man framgångsrikt skriver om gammal mysql-php-kod med föråldrade mysql_*-funktioner?

  3. GETDATE() Exempel i SQL Server (T-SQL)

  4. Skicka flera uppsättningar eller matriser av värden till en funktion