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),也支持自定义数据类型转换。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 安全工具-Sparta

    安全工具-SpartaSparta是一个集端口扫描、网络扫描、服务探测以及暴力激活成功教程等多项功能于一身的工具,kali中已经预装了该工具,可直接使用。  >输入目标IP,开始扫描即可探测出开放的端口及服务  >选中ssh服务,对其进行暴力激活成功教程  >确认IP地址、端口、扫描服务等,上传用户名-密码字典后Run  >查看扫描log,探测出一个密码被激活成功教程Hydrav8.2(c…

  • Maven 打包问题「建议收藏」

    Maven 打包问题「建议收藏」Maven打包问题1、问题描述2、问题分析3、问题解决4、总结1、问题描述今天给聚合工程统一打包时出现这样一个异常packaging’withvalue’jar’isinvalid.Aggregatorprojectsrequire’pom’aspackaging.@line4,column109。完整异常如下:[INFO]Scanningforpro…

  • 解决树莓派IOError: [Errno Invalid sample rate] -9997 采样率16K错误

    解决树莓派IOError: [Errno Invalid sample rate] -9997 采样率16K错误树莓派在基于pyaudio录音的时候会提示如上错误,这主要是使用的树莓派声卡不支持当前的采用率,没关系,其实在alsa架构下我们可以通过声卡的插件实现转换。在树莓派下家目录创建一个声卡隐藏配置文件 .asoundrc。特别不要在你的pyaudio里面设置打开声卡的编号因为下面的配置以及配置了pcm.!default{typehwcard1}ctl.!default{…

    2022年10月16日
  • MATLAB中canny算子边缘检测「建议收藏」

    MATLAB中canny算子边缘检测「建议收藏」今天来介绍一下关于canny算子做边缘检测的过程:Canny的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:好的检测-算法能够尽可能多地标识出图像中的实际边缘。好的定位-标识出的边缘要与实际图像中的实际边缘尽可能接近。最小响应-图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。1、首先打开MATLAB软件,在其主界面中写入下列代码:I=imre…

  • Maven的安装与配置

    Maven的安装与配置Maven超详细的安装与配置步骤

  • 万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程

    万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程在大学时学习Hadoop大数据技术的时候,安装配置Hadoop框架,发现找的一些资料介绍得不够详细,比如一些路径的变化没有说清楚,这对于初学者来说是不够友好的,所以在这里做个详细总结介绍一下Hadoop框架,以及Ubuntu版本的Hadoop伪分布式的安装配置。

发表回复

您的电子邮箱地址不会被公开。

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