sql >> Databáze >  >> RDS >> PostgreSQL

Jak zajistím, aby výčty Java a Postgres spolupracovaly při aktualizaci?

Z pohledu JDBC prostě zacházejte s výčtem PostgreSQL jako s řetězcem.

Cituji blog Převod mezi výčty Java a výčty PostgreSQL:

PostgreSQL vám umožňuje vytvářet typy výčtů pomocí následující syntaxe:

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

Nyní můžete ve svých tabulkách použít jako datový typ ‚zvíře‘, například:

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

V Javě byste měli odpovídající typ výčtu:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

Převod mezi výčty Java a PostgreSQL je přímočarý. Chcete-li například vložit nebo aktualizovat pole výčtu, můžete použít syntaxi CAST ve svém 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 vám také umožní vložit/aktualizovat výčet pouhým předáním jeho hodnoty jako řetězce.

Ať už casting nebo ne, Java strana je stejná. Pole byste nastavili takto:

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

Načtení výčtu z příkazu SELECT vypadá takto:

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

Vezměte v úvahu, že ve výčtech se rozlišují velká a malá písmena, takže bude třeba vzít v úvahu jakékoli neshody malých a velkých písmen mezi vašimi výčty Postgres a výčty Java. Všimněte si také, že typ výčtu PostgreSQL je nestandardní SQL, a proto není přenosný.



  1. Jak se připojím k serveru SQL pomocí sqlalchemy pomocí ověřování systému Windows?

  2. Oracle PL/SQL:Zkontrolujte, zda je BLOB nebo CLOB prázdný

  3. Implementace fulltextového vyhledávání v SQL Server 2016 pro pokročilé uživatele

  4. Jak získat druhý největší nebo třetí největší záznam z tabulky