前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换

MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换

作者头像
全栈程序员站长
发布2022-09-09 14:09:05
3.9K0
发布2022-09-09 14:09:05
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一、概述

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

二、映射类型

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.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

三、类型转换

上面我们看到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

四、总结

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162204.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档