PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para que as enumerações Java e Postgres funcionem juntas para atualização?


Do ponto de vista do JDBC, apenas trate a enumeração do PostgreSQL como uma string.

Citação de blog Converter entre enums Java e enums PostgreSQL:

O PostgreSQL permite que você crie tipos de enumeração usando a seguinte sintaxe:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');

Agora você pode usar 'animal' como um tipo de dados em suas tabelas, por exemplo:
create table pet (                         
    pet_id        integer         not null,
    pet_type      animal_type     not null,
    name          varchar(20)     not null
);

Em Java, você teria um tipo de enumeração correspondente:
public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

A conversão entre enums Java e PostgreSQL é simples. Por exemplo, para inserir ou atualizar um campo enum, você pode usar a sintaxe CAST em seu 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, ?);

O Postgres também permitirá que você insira/atualize uma enumeração apenas passando seu valor como uma string.

Se lançando ou não, o lado Java é o mesmo. Você definiria os campos assim:
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');

Recuperar o enum de uma instrução SELECT é assim:
AnimalType.valueOf(stmt.getString("pet_type"));

Leve em consideração que as enumerações diferenciam maiúsculas de minúsculas, portanto, quaisquer incompatibilidades de maiúsculas e minúsculas entre as enumerações do Postgres e as enumerações do Java terão que ser consideradas. Observe também que o tipo de enumeração do PostgreSQL não é SQL padrão e, portanto, não é portátil.