前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDBC:Java中枚举类型和PostgreSQL数据库中枚举类型的映射

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

作者头像
卡尔曼和玻尔兹曼谁曼
发布2023-12-01 08:46:40
1440
发布2023-12-01 08:46:40
举报

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

代码语言:javascript
复制
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');

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

代码语言:javascript
复制
create table pet (
                  pet_id        integer         not null,
                  pet_type      animal_type     not null,
                  name          varchar(20)     not null
                  );

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

代码语言:javascript
复制
public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
 }

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

代码语言:javascript
复制
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, CAST(? AS animal_type), ?);

或者

代码语言:javascript
复制
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, ?::animal_type, ?);

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

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

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

代码语言:javascript
复制
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');

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

代码语言:javascript
复制
AnimalType.valueOf(stmt.getString("pet_type"));

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

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

代码语言:javascript
复制
SELECT enumlabel FROM pg_enum
    WHERE enumtypid = 'your_enum'::regtype ORDER BY oid;

原文地址:http://www.gotoquiz.com/web-coding/programming/java-programming/convert-between-java-enums-and-postgresql-enums/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档