MySQL字段类型到JAVA类型的对应及转换
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.
|
BOOL , BOOLEAN
|
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.Date with 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),也支持自定义数据类型转换。
MySQL字段类型到JAVA类型的对应及转换相关推荐
- Java JDBC中,MySQL字段类型到JAVA类型的转换
转载自:https://www.cnblogs.com/waterystone/p/6226356.html 1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该 ...
- 总结java数据类型和mysql、oracle、pgsql数据类型对应关系,附数据库字段类型转java类型代码
java的基本数据类型有八种: byte.short.int.long.float.double.char.boolean 总结java和mysql.oracle.pgsql数据类型对应关系 java ...
- 数据库字段类型、JDBC类型、Java类型映射关系
数据库字段类型:指的就是数据库字段设置的类型. JDBC类型:java database connector的缩写. 不同的数据库为了能让Java 程序链接并使用数据库, 各个数据库厂商自己提供的驱动 ...
- java和jdbc对应关系,JDBC类型与JAVA类型对应关系
最近在做代码生成工具,通过数据库表生成代码半成品,其中就有JDBC类型与JAVA类型对应的问题. 我的做法看看别人是怎么对应的,JDBC驱动里面一定有,我们就postgresql数据,通过搜索解压后的 ...
- MYSQL类型与JAVA类型对应表
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.S ...
- java b 类型_什么类型的Java类型是“[B”?
我试图通过Java代码(Hibernate)从MySQL DB获取MD5加密传递.但我不能得到字符串或任何合理的Java类型. 我唯一得到的是这个无益的信息: java.lang.ClassCastE ...
- Mybatis:数据库的类型与java类型对应
Mybatis与数据库的类型对应 1:Java数据类型与MySql数据类型对照表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类 ...
- 数据库类型与Java类型对照表
数据库类型 Java类型 JDBC类型索引(int) tinyint java.lang.Integer -6 bigint java.math.BigInteger -5 blob longblob ...
- mysql字段是自动增长类型结果却不是连续的
今天建了一张表,设置其"id"属性为自动增加类型,但是在查看所有数据的时候,却发现"id"的值不是连续增加的.建表的语法如下: mysql> create ...
最新文章
- 如何使用 UserAccountControl 标志操纵用户帐户属性
- 07- Firmware Update (FWU)
- SpringMVC +Hibernate 学习实例
- 方立勋_30天掌握JavaWeb_数据库表设计
- 卷积神经网络的结构_射击训练:卷积神经网络识别解剖结构标志位点
- [css] 说说响应式设计(responsive design)和自适应设计(adaptive design)的区别?
- Android开发实现HttpClient工具类
- UltraEdit v17.10.0,注册机,注册码
- 信息安全系统设计基础实验二:固件设计
- 关于opencv标定的一些疑问,首先声明这篇文章转载于纸异兽,由于暂时联系不到他本人,只好请教各位了。有些问题想请教,各位大神可以留下联系方式帮我解决,万分感谢...
- 小型数控雕刻机制作Arduino_微型CNC制作基于开源项目GRBL
- 图像处理之常见二值化方法汇总
- CRC校验关键点说明(内附C语言CRC校验库)
- 2022-07微软漏洞通告
- 货郎问题java_动态规划----货郎担问题
- tns:无监听 解决之一:由于 linstener.log 贮存过满导致
- 「Python开发者」公号招内容编辑
- ios Mac下的SVN工具:Cornerstone与Versions和使用subversion管理iOS源代码
- 阿里云服务器被检测到有wa kuang程序
- aaa服务器显示认证失败,华为aaa认证案例-电信华为机顶盒50%通路故障或AAA认证失败怎么回...
热门文章
- R语言epiDisplay包的kap函数计算Kappa统计量的值(总一致性、期望一致性)、对多个评分对象的结果进行一致性分析、评分的类别为多个类别、如果评分中包含缺失值则标准误及其相关统计量则无法计算
- 网络设置及其修改配置文件全程实操,可跟做
- Python数据攻略-Pandas数据可视化
- python现状与背景
- 本草纲目pdf彩图版下载_实用本草纲目彩色图鉴彩图版
- weui-master中的lrz实现移动端图片文件压缩(参:localResizeIMG4)
- idea配置数据库之后schema内没有表数据
- 如何实现 Paypal 取现?
- 风控模型中特征重要度的两种筛选方法
- Fiddler 网页采集抓包利器__手机app抓包