MySQL字段类型到JAVA类型的对应及转换

article/2025/10/28 21:22:53

1. 概述

  在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案。

2. 类型映射

   java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型,官名也叫JDBC类型。每个数据库产品的数据类型定义各不相同,但都有JDBC类型与之对应,如MySQL的BIGINT-->JDBC的BIGINT。

  而每个JDBC类型,都有默认的Java类型与之对应,即ResultSet.getObject()返回Object的具体类型,如JDBC的BIGINT-->Java的java.lang.Long;JDBC的BIGINT UNSIGNED-->Java的 java.math.BigInteger。

  我们可以通过ResultSet.getMetaData().getColumnTypeName(columnIndex)获取字段的JDBC类型,通过ResultSet.getMetaData().getColumnClassName(columnIndex)获取字段的Java类型。

  下图展示了MySQL类型类型、JDBC类型、Java类型的映射关系(源自:5.3 Java, JDBC and MySQL Types)。

MySQL数据类型 JDBC类型(getColumnTypeName) 默认返回的Java类型(getColumnClassName)
BIT(1) (new in MySQL-5.0) BIT java.lang.Boolean
BIT( > 1) (new in MySQL-5.0) BIT byte[]
TINYINT TINYINT java.lang.Boolean if the configuration property tinyInt1isBit is set to true (the default) and the storage size is 1, or java.lang.Integer if not.
BOOLBOOLEAN TINYINT See TINYINT, above as these are aliases for TINYINT(1), currently.
SMALLINT[(M)] [UNSIGNED] SMALLINT [UNSIGNED] java.lang.Integer (regardless of whether it is UNSIGNED or not)
MEDIUMINT[(M)] [UNSIGNED] MEDIUMINT [UNSIGNED] java.lang.Integer (regardless of whether it is UNSIGNED or not)
INT,INTEGER[(M)] [UNSIGNED] INTEGER [UNSIGNED] java.lang.Integer, if UNSIGNED java.lang.Long
BIGINT[(M)] [UNSIGNED] BIGINT [UNSIGNED] java.lang.Long, if UNSIGNED java.math.BigInteger
FLOAT[(M,D)] FLOAT java.lang.Float
DOUBLE[(M,B)] DOUBLE java.lang.Double
DECIMAL[(M[,D])] DECIMAL java.math.BigDecimal
DATE DATE java.sql.Date
DATETIME DATETIME java.sql.Timestamp
TIMESTAMP[(M)] TIMESTAMP java.sql.Timestamp
TIME TIME java.sql.Time
YEAR[(2|4)] YEAR If yearIsDateType configuration property is set to false, then the returned object type is java.sql.Short. If set to true (the default), then the returned object is of type java.sql.Datewith the date set to January 1st, at midnight.
CHAR(M) CHAR java.lang.String (unless the character set for the column is BINARY, then byte[] is returned.
VARCHAR(M) [BINARY] VARCHAR java.lang.String (unless the character set for the column is BINARY, then byte[] is returned.
BINARY(M) BINARY byte[]
VARBINARY(M) VARBINARY byte[]
TINYBLOB TINYBLOB byte[]
TINYTEXT VARCHAR java.lang.String
BLOB BLOB byte[]
TEXT VARCHAR java.lang.String
MEDIUMBLOB MEDIUMBLOB byte[]
MEDIUMTEXT VARCHAR java.lang.String
LONGBLOB LONGBLOB byte[]
LONGTEXT VARCHAR java.lang.String
ENUM('value1','value2',...) CHAR java.lang.String
SET('value1','value2',...) CHAR java.lang.String

 

3. 类型转换

  上面我们看到MySQL的BIGINT默认转为Java的java.lang.Long,那是不是就不能转为String或其他数值类型了?答案是否定的!MySQL的JDBC(Connector/J)在字段类型与Java类型之间的转换是比较灵活的。一般来说,任何字段类型都可以转换为java.lang.String,任何数值字段类型都可以转换为Java的数据类型(当然会出现四舍五入、溢出、精度丢失的问题)。

  下图展示了MySQL JDBC允许的跨类型相互转换。 

MySQL数据类型 可以被转换的Java类型
CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET java.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob
FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINT java.lang.String, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Double, java.math.BigDecimal
DATE, TIME, DATETIME, TIMESTAMP java.lang.String, java.sql.Date, java.sql.Timestamp

 4. 总结

  MySQL JDBC对每种字段类型,都有相应的Java类型与之对应,也可以转换为其他Java类型。但这种转换还不够灵活,如TIMESTAMP与java.util.Date就转换不了,只能人工转换。这里推荐使用MyBatis,它内置了许多TypeHander,支持各种基础数据类型间的转换(xxxTypeHandler),也支持自定义数据类型转换。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/bO97RBJ1.shtml

相关文章

Java类型擦除

什么是类型擦除 Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的…

如何直接用Tomcat启动项目

我这里用的是自动安装版本的Tomcat 解压版的方法差不多,就是启动时到bin文件夹下双击startup文件 首先先得有一个war包(war后缀文件) 这里用eclipse工具做示范 1.确保你的web项目在eclipse里面能启动 2.导出war包 Finish之后就导出了war包。…

Mac启动tomcat的介绍

下载安装到官网上找一下资源就好,windows电脑可以直接双击startup来运行,而本篇博客介绍mac端如何启动tomcat 找到tomcat安装路径 打开访达,下载,找到名为apache-tomcat-版本号的文件 打开终端 进入tomcat文件夹下的bin路径 在…

Mac启动Tomcat

很多使用Mac的小伙伴下载好Tomcat,并不知道如何打开Tomcat,本篇文章将介绍如何开启Tomcat。 1、在访达中找到下载好的Tomcat文件夹 2、打开终端,使用命令进入该文件夹 cd apache-tomcat-10.0.203、进入该文件夹下的bin文件夹 cd bin此时可…

IDEA启动Tomcat失败

IDEA启动Tomcat失败的解决方法 1.运行Tomcat之后,找不到网页 2. Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099 3. 部署的tomcat项目呈断开状态 解决方法 在安装的tomcat路径中打开b…

windows系统启动tomcat服务的三种方式

1.双击执行tomcat/bin目录下的startup.bat文件,会自动显示一个命令行窗口(关闭窗口,服务会停止),不推荐此方法,会严重影响系统访问速度。 2.将tomcat以服务的形式安装,然后在服务管理中,启动tomcat服务。 3.利用Windows的任务计划程序库,创建一个任务,让…

Tomcat启动项目的三种方式

Tomcat启动项目的三种方式 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Manager Web应用程序 一:部署解包的webapp目录 将Web项目部署到Tomcat中的方法之一,是部署没有封装到WAR文件中的Web…

Tomcat 启动流程

目录 一:流程 二:源码解析 1.Lifecycle 2 .各组件的默认实现 3 .源码入口 三:总结 一:流程 步骤 : 1 )启动 tomcat , 需要调用 bin/startup.bat ( 在 linux 目录下 , 需要调用 bin/startup.sh…

tomcat两种启动方式

tomcat的两种启动方式,第一种,直接点击bin/startup.bat启动,第二种注册成服务启动 1、通过startup.bat启动 指定jdk:在tomcat/bin/setclasspath.bat 里面添加(为什么要在setclasspath.bat里面添加,因为通…

深入springboot怎么启动tomcat

深入springboot怎么启动tomcat EnableAutoConfiguration做了哪些事小总结 Tomcat何时启动的呢?小总结 这是中高级工程师面试中常问的问题。 知道现在有多卷了吧! 我记得我刚找工作那会儿,我只要8000的工资,面试官都要问这个问题。…

Windows如何设置Tomcat开机启动?

前置步骤: 在tomcat中的bin目录下,双击startup.bat运行tomcat, 在浏览器正常打开Tomcat情况下,说明tomcat安装正常,双击shutdown.bat停掉tomcat 第一步: 1、设置环境变量 2、在 用户变量 新建 CATALINA_H…

Linux服务器启动tomcat的三种方式

直接进入主题,首先cd进入tomcat的bin文件夹下,然后可以尝试以下三种启动方式: 第一种(当前会话启动): ./startup.sh 效果: 然后tomcat就在后台启动了,我们还可以在当前会话中继续输入其它指令…

Tomcat-启动流程

文章目录 叨叨程序入口加载load流程简述Bootstrap.load()Catalina.load(params)init()模板方法init流程总结 start()模板方法流程简述start()模板方法Host.start()特别说明 叨叨 讲真,最开始源码调试几遍下来还是很懵了,尤其是组件初始化过程中不断去调用…

java教程(三)初识J2ee十三个规范

 我目前是个java未入门的新手,这边看到高手的一些文章,转载过来。---haogting J2EE是一套全然不同于传统应用开发的技术架构,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与复用价值。 …

J2EE【开发环境搭建】

EasyUI【DataGrid数据查询】_云彩123的博客-CSDN博客_easyui 获取datagrid数据如需温习上一节内容,请点击下方链接进行跳转:EasyUI(Tree后端工作)_云彩123的博客-CSDN博客用户信息表(T_User)列名数据类型长度允许空默认值说明idva…

J2EE(环境搭建)

目录 一、jdk安装&环境配置 A、拿到exe文件 B、默认安装位置 C、配置环境变量 D、注意事项 二、Eclipse安装&设置默认编码集 A、解压 B、选择工作区间 C、设置默认编码集 Ca、设置jsp默认编码 Cb、设置workspace编码方式 三、配置Tomcat及JDK A、配置Tomcat …

java quartz 教程_Quartz 教程

一、关于 Quartz Quartz logo Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。 Quartz 允许程序开发人员根据时间的间隔来调度作业。 Quartz 实现了作…

J2EE入门:环境搭建

前言: JDK的安装以及JDK的环境配置 tomcat的安装 Eclipce的环境配置 MySQL的安装 JDK安装以及环境配置 直接点击JDK安装包安装 JDK默认安装位置:C:\Program Files\Java 然后双击jdk144文件夹 进来之后选中地址栏复制地址 然后退出至桌面,右键桌面…

J2EE之旅(入门)

从这次开始我们就要开始学习j2ee,我们先来介绍一下我们将要使用到的 1.测试工具:ApiPost_Setup_5.4.2_x64.exe 2.开发工具:vs 3.数据库:考虑了多方面,数据库我们就选用mysql 4.数据库可视化工具: 由于这些软件安装大部…

J2EE入门教程

2005-12-11 20:20:21 J2EE入门教程本教程讲述Sun J2EE 1.3 SDK的安装、配置和创建并部署第一个简单的EJB。我们的目标平台是Windows XP SP2,JDK 1.4.2和J2EE SDK 1.3.1的Windows版本。我们在下面的实践中主要使用命令行模式,便于深入J2EE的内部机制。首先…