Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JDBC:Java中枚举类型和PostgreSQL数据库中枚举类型的映射

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

作者头像
卡尔曼和玻尔兹曼谁曼
发布于 2023-12-01 00:46:40
发布于 2023-12-01 00:46:40
29900
代码可运行
举报
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table pet (
                  pet_id        integer         not null,
                  pet_type      animal_type     not null,
                  name          varchar(20)     not null
                  );

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public enum AnimalType {
    DOG,
    CAT,
    SQUIRREL;
 }

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, CAST(? AS animal_type), ?);

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, ?::animal_type, ?);

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AnimalType.valueOf(stmt.getString("pet_type"));

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mybatis-Plus 通用枚举类型的使用
有些字段,例如性别、婚姻状况、等标志性字段,在数据库中存放的形式往往是数字,0 或者 1,这样做的好处是存取的效率高节省空间,但是前端的在展示的时候不能直接展示,需要进行一个判断,但是判断逻辑放在前端不妥,所以后端应该提前将值转换好返回该前端。
wsuo
2021/08/24
2.1K0
面试官:小伙子,Mybatis的本质和原理说一下
项目需要,我们需要自己做一套mybatis,或者使用大部分mybatis地原始内容。对其改造,以适应需要。这就要求我再次学习一下mybatis,对它有更深入的了解。
程序员白楠楠
2021/01/24
3180
JAVA内嵌数据库H2的使用入门
H2的优势:     1、h2采用纯Java编写,因此不受平台的限制。     2、h2只有一个jar文件,十分适合作为嵌入式数据库试用。     3、h2提供了一个十分方便的web控制台用于操作和管理数据库内容。
JQ实验室
2022/02/09
1.7K0
Java入门(16)-- 枚举类型与泛型
枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中,此外,它还提供了安全检查功能,枚举类型本质还是以类的形式存在的。泛型的出现不仅可以让程序员少写一些代码,更重要的是它可以解决类型安全问题,泛型提供了编译时的安全检查,不会因为将对象置于某个容器中而失去其类型。
爱学习的程序媛
2022/04/07
7850
Java入门(16)-- 枚举类型与泛型
【说站】java枚举类型的原理
1、Java追加了java.lang.Enum抽象类,是所有的枚举类型的基础类。提供了基本的属性和基本的方法。同时,支持将枚举作为Set和Map使用
很酷的站长
2022/11/24
3340
【说站】java枚举类型的原理
Java源码系列(3):枚举类型
1//定义枚举类型 2enum Day { 3 MONDAY, TUESDAY, WEDNESDAY, 4 THURSDAY, FRIDAY, SATURDAY, SUNDAY 5}
陈琛
2020/06/12
4580
Java源码系列(3):枚举类型
Java枚举类型的原理
package com.lxq.enumm;   public enum Color   {       RED{   public String getName(){   return "红色";           }       }       ,GREEN{   public String getName(){   return "绿色";           }       }       ,YELLOW{   public String getName()
汤高
2018/03/28
1.4K0
Java魔法堂:枚举类型详解
一、前言                                   Java的枚举类型相对C#来说具有更灵活可配置性,Java的枚举类型可以携带更多的信息。 // C# enum MyColor{ RED = 0, BLUE = 1 } Console.Write(MyColor.RED); // Java enum MyColor{ RED("Hot", 4), BLUE("SAD",8); private String mood; public String get
^_^肥仔John
2018/01/18
1K0
java | 深入理解Java枚举类型(二)
blog.csdn.net/javazejian/article/details/71333103
JavaFish
2019/10/17
1.3K0
Python的枚举类型
产生: 数据类型 dict,list,tuple,set 等等有时并不适用 使用: 引入模块:form enum import Enum 示例: 所有的枚举类型都是Enum类的子类,Py中没有enum这个数据类型 枚举类中定义了多组常量,枚举类名和标识名推荐大写 from enum import Enum class EMP(Enum): YELLOW = 1 GREEN = 2 BLACK = 3 RED = 4 上述常量只要赋值为不同量即可,可以为不同的数字或不同的字符
ZONGLYN
2019/08/08
1.7K0
Spring Boot 枚举类型的自动转换
需求:一般我们在数据库都会定义数值型的枚举常量,不管是序列化还是反序列化都是需要我们手动去转换成枚举类型的,既然这样我们能不能让它们自动转换呢?接下来我们就来尝试一下:
啵啵肠
2023/11/17
7180
myabtis中是否可以映射 Enum 枚举类
在MyBatis中,映射Enum枚举类是完全可行的。MyBatis提供了灵活的方式来处理Java枚举类型与数据库中的值之间的映射。
程序员朱永胜
2024/01/08
8340
JDBC连接PostgreSQL数据库的若干问题
首先说一个我在创建数据库的时候遇到的一个问题:PostgreSQL在创建数据表的时候,我想创建一个User表,但是PLSQL命令提示符提示有错,我后来改成userinfo就好了,我上网查了查要是给User加上引号也可以,即 CREATE TABLE "USER" ();
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.8K0
MySQL精选 | 枚举类型ENUM的DDL变更测试
本文深入介绍枚举类型EUNM和集合类型SET。测试基于InnoDB存储引擎上,对MySQL数据库枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?通过本文了解下。
数据和云
2019/05/15
3.1K0
Java 枚举类型 enum
枚举类型是 Java 5 中增加的一个小特性,在此之前,实现枚举的方式为定义编译期常量形式。而代码中使用编译期常量的方式在理解性和安全性方面存在不足,单纯的常量数值不能够直观的体现出其作为枚举实例的目的,且实际中无限的取值空间也不能很好的与理论上有限的枚举空间相匹配。
zhipingChen
2018/10/09
1.3K0
窥探Swift之别样的枚举类型
  想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了。Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性。在Swift语言中的枚举可谓是让人眼前一亮。在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇博客中将领略一些Swift中枚举类型的魅力。   有小伙伴会问,不就是枚举么,有什么好说的。在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅可以
lizelu
2018/01/11
1K0
Java 扫描枚举类并获取属性
1、(必须)要返回的枚举必须遵守 MyEnum 接口规范,不一定要实现该接口,但必须有 getKey 和 getValue 两个方法;
訾博ZiBo
2025/01/06
440
「探索Java中的EnumMap:利用枚举类型优化Map实现」
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2023/11/06
7970
「探索Java中的EnumMap:利用枚举类型优化Map实现」
初探Java枚举类
枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景。如性别(男、女),颜色(红、黄、蓝),星期(星期一、星期二…星期日)均可以使用枚举存储。
沁溪源
2020/12/11
6980
Java枚举类型使用
在编程中,常常遇到多种类型、多种状态的情况,对于这种可以事先预知的业务我们常常有两种表示方法:
付威
2018/12/05
2.2K0
相关推荐
Mybatis-Plus 通用枚举类型的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验