JDBC:Java中枚举类型和PostgreSQL数据库中枚举类型的映射


以下内容转自:

https://blog.csdn.net/theonegis/article/details/41749773

 

PostgreSQL数据库允许你使用如下的语法创建枚举类型:

 

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


创建以后就可以使用animal_type作为数据表中的数据类型,例如:

 

 

  1.  
    create table pet (
  2.  
    pet_id integer not null,
  3.  
    pet_type animal_type not null,
  4.  
    name varchar(20) not null
  5.  
    );


在Java中你也要创建相应的枚举类型:

 

 

  1.  
    public enum AnimalType {
  2.  
    DOG,
  3.  
    CAT,
  4.  
    SQUIRREL;
  5.  
    }


Java中枚举类型和PostgreSQL中枚举类型的转换是很直接的。例如,要进行数据的插入或者更新,可以使用CAST语法在SQL 的PreparedStatement语句中这样写:

 

 

INSERT INTO pet (pet_id, pet_type, name) VALUES (?, CAST(? AS animal_type), ?);


或者

 

 

INSERT INTO pet (pet_id, pet_type, name) VALUES (?, ?::animal_type, ?);


注:这两种SQL语句作用是一样的。

 

PostgreSQL还可以允许你传递一个String类型的字符来进行对数据库中枚举类型数据的插入或者更新。

在Java端代码都是一一样的,你像下面一样可以设置字段的值:

 

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


从数据库中提取枚举枚举类型的值也很简单:

 

 

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


考虑到枚举类型时大小写敏感的,所以你在PostgreSQL数据库和Java嗲面中应该考虑到,做到大小写统一。而且PostgreSQL中的enum枚举类型不是标准的SQL类型所以不具有可移植性。

 

在PostgreSQL中参考枚举类型的值,可以使用如下的查询语句:

 

  1.  
    SELECT enumlabel FROM pg_enum
  2.  
    WHERE enumtypid = 'your_enum'::regtype ORDER BY oid;



 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM