PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie bringe ich Java- und Postgres-Enums dazu, für die Aktualisierung zusammenzuarbeiten?

Behandeln Sie die PostgreSQL-Enumeration aus JDBC-Sicht einfach wie einen String.

Zitat-Blog Konvertieren Sie zwischen Java-Enumerationen und PostgreSQL-Enumerationen:

Mit PostgreSQL können Sie Aufzählungstypen mit der folgenden Syntax erstellen:

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

Sie können jetzt „Tier“ als Datentyp in Ihren Tabellen verwenden, zum Beispiel:

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

In Java hätten Sie einen entsprechenden Aufzählungstyp:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

Das Konvertieren zwischen Java- und PostgreSQL-Enumerationen ist unkompliziert. Um beispielsweise ein Aufzählungsfeld einzufügen oder zu aktualisieren, könnten Sie die CAST-Syntax in Ihrem SQL PreparedStatement verwenden:

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

Mit Postgres können Sie auch eine Aufzählung einfügen/aktualisieren, indem Sie einfach ihren Wert als Zeichenfolge übergeben.

Ob Casting oder nicht, die Java-Seite ist die gleiche. Sie würden die Felder wie folgt festlegen:

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

Das Abrufen der Aufzählung aus einer SELECT-Anweisung sieht folgendermaßen aus:

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

Beachten Sie, dass bei Aufzählungen zwischen Groß- und Kleinschreibung unterschieden wird, sodass alle Fälle, in denen Ihre Postgres-Aufzählungen und Java-Aufzählungen nicht übereinstimmen, berücksichtigt werden müssen. Beachten Sie auch, dass der PostgreSQL-Enumerationstyp kein Standard-SQL ist und daher nicht portierbar.