PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara membuat enum Java &Postgres bekerja sama untuk pembaruan?

Dari sudut pandang JDBC, perlakukan enum PostgreSQL seperti string.

Mengutip blog Konversi antara enum Java dan enum PostgreSQL:

PostgreSQL memungkinkan Anda membuat tipe enum menggunakan sintaks berikut:

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

Anda sekarang dapat menggunakan 'hewan' sebagai tipe data di tabel Anda, misalnya:

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

Di Java, Anda akan memiliki jenis enum yang sesuai:

public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
}

Mengonversi antara enum Java dan PostgreSQL sangatlah mudah. Misalnya, untuk menyisipkan atau memperbarui bidang enum, Anda dapat menggunakan sintaks CAST di 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 juga memungkinkan Anda menyisipkan/memperbarui enum hanya dengan meneruskan nilainya sebagai string.

Apakah casting atau tidak, sisi Jawa adalah sama. Anda akan mengatur bidang seperti ini:

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

Mengambil enum dari pernyataan SELECT terlihat seperti ini:

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

Mempertimbangkan bahwa enum peka terhadap huruf besar/kecil, jadi setiap ketidakcocokan kasus antara enum Postgres Anda dan enum Java harus diperhitungkan. Perhatikan juga bahwa tipe enum PostgreSQL adalah SQL non-standar, dan karenanya tidak portabel.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah nilai default kolom di PostgreSQL?

  2. Bagaimana current_timestamp() Bekerja di PostgreSQL

  3. Periksa target statistik di PostgreSQL

  4. Bisakah saya membuat fungsi plpgsql mengembalikan integer tanpa menggunakan variabel?

  5. SERIAL / peningkatan otomatis khusus per grup nilai