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

MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换一、概述在使用JavaJDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案。二、映射类型java.sql.Types定义了常用数据库(MySQL、Oracle、DB2等)所用到的数据类型,官名也叫JDBC类型。每个数据库产品的数据类型定义各不相同,但都有JDBC类型与之对应,如MySQL的BIGINT–>JDBC的BIGINT…

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

一、概述

在使用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.net/162204.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月20日 上午11:00
下一篇 2022年7月20日 上午11:00


相关推荐

  • ettercap的使用帮助文档 官方man page的个人理解

    ettercap的使用帮助文档 官方man page的个人理解原英文的帮助文档可以在http://linux.die.net/man/8/ettercap查看或者在安装有ettercap的Linux终端输入”manettercap”查看多数以我自己的理解的方式翻译,不是很理解的地方翻译过来的可能会有很多不对的地方如果对我翻译的内容有不一样的看法,欢迎交流。Nameettercap0.7.5-Amultipurposesniffer/co

    2022年6月28日
    56
  • 3极管的原理_二极管讲解

    3极管的原理_二极管讲解我们把晶体管比作两个二极管时候,是指基极-射极二极管和基极-集电极二极管。NPN型二极管与PNP型二极管对三极管放大作用的理解,切记一点:能量不会无缘无故的产生,所以,三极管一定不会产生能量。但三极管厉害的地方在于:它可以通过小电流控制大电流。放大的原理就在于:通过小的交流输入,控制大的静态直流。假设三极管是个大坝,这个大坝奇怪的地方是,有两个阀门,一个大阀门,一个小阀门。小阀门可以用…

    2022年10月21日
    6
  • 格力与京东签署战略合作协议 目标三年销AI空调1000万台

    格力与京东签署战略合作协议 目标三年销AI空调1000万台

    2026年3月14日
    2
  • 一图解密AlphaZero(附Pytorch实践)

    一图解密AlphaZero(附Pytorch实践)知乎专栏同步发布: https://zhuanlan.zhihu.com/p/41133862本来打算自己写写的,但是发现了DavidFoster的神作,看了就懂了。我也就不说啥了。看不清的话,原图在后面的连接也可以找到。没懂?!!!那我再解释下。 AlphaGoZero主要由三个部分组成:自我博弈(self-play),训练和评估。和AlphaGo比较,AlphaZ…

    2022年6月25日
    56
  • MT管理器激活成功教程COC辅助

    MT管理器激活成功教程COC辅助原本辅助是免费的 但是被不良商家上架某宝 1 分析原因 弹窗激活 2 MT 管理器打开 apk 安装包 3 dex 编辑器 选择 dex 文件 4 发起新的搜索 查找字符串 5 MT 管理器没 VIP 所以用电脑版 jadx 看 java 代码 6 删除对应 smali 代码 240 4087 保存并退出 重新签名

    2026年3月17日
    2
  • Linux下七种文件类型、文件属性及其查看方法

    Linux下七种文件类型、文件属性及其查看方法1、七种文件类型普通文件类型Linux中最多的一种文件类型,包括纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为[-]目录文件就是目录,能用#cd命令进入的。第一个属性为[d],例如[drwxrwxrwx]块设备文件块设备文件:就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号

    2022年5月15日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号