sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo hago que las enumeraciones de Java y Postgres funcionen juntas para la actualización?

Desde el punto de vista de JDBC, simplemente trate la enumeración de PostgreSQL como una cadena.

Blog de citas Convertir entre enumeraciones de Java y enumeraciones de PostgreSQL:

PostgreSQL le permite crear tipos de enumeración utilizando la siguiente sintaxis:

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

Ahora puede usar 'animal' como tipo de datos en sus tablas, por ejemplo:

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

En Java, tendría un tipo de enumeración correspondiente:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

La conversión entre enumeraciones de Java y PostgreSQL es sencilla. Por ejemplo, para insertar o actualizar un campo de enumeración, puede usar la sintaxis CAST en su 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 también le permitirá insertar/actualizar una enumeración simplemente pasando su valor como una cadena.

Ya sea que emita o no, el lado de Java es el mismo. Establecerías los campos así:

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

La recuperación de la enumeración de una declaración SELECT se ve así:

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

Tenga en cuenta que las enumeraciones distinguen entre mayúsculas y minúsculas, por lo que deberá tener en cuenta cualquier discrepancia de mayúsculas y minúsculas entre sus enumeraciones de Postgres y Java. También tenga en cuenta que el tipo de enumeración de PostgreSQL no es SQL estándar y, por lo tanto, no es portátil.