6.5 Java, JDBC, and MySQL Types

MySQL Connector/J 在处理 MySQL 数据类型和 Java 数据类型之间的转换方面非常灵活。

通常,任何 MySQL 数据类型都可以转换为 java.lang.String,任何数字类型都可以转换为任何 Java 数字类型,尽管可能会出现舍入、溢出或精度损失。

Connector/J 按照 JDBC 规范的要求发出警告或抛出DataTruncation异常,除非通过使用连接属性jdbcCompliantTruncation并将其设置为 false将禁用上述行为。

下表列出了始终保证有效的转换。第一列列出了一种或多种 MySQL 数据类型,第二列列出了一种或多种 MySQL 类型可以转换为的 Java 类型。

Table 6.19 Possible Conversions Between MySQL and Java Data Types

These MySQL Data TypesCan always be converted to these Java types
CHAR, VARCHAR, BLOB, TEXT, ENUM, and SETjava.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob
FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINTjava.lang.String, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Double, java.math.BigDecimal
DATE, TIME, DATETIME, TIMESTAMPjava.lang.String, java.sql.Date, java.sql.Timestamp

注意
如果您选择的 Java 数字数据类型的精度或容量低于您正在转换的 MySQL 数据类型,则可能会发生舍入、溢出或精度丢失。

ResultSet.getObject()方法用于 MySQL 和 Java 类型之间的类型转换,并在适当的地方遵循 JDBC 规范。ResultSetMetaData.GetColumnTypeName()和 返回的值 ResultSetMetaData.GetColumnClassName() 如下表所示。有关 JDBC 类型的更多信息,请参阅有关java.sql.Types类的参考资料 。

Table 6.20 MySQL Types and Return Values for ResultSetMetaData.GetColumnTypeName()and ResultSetMetaData.GetColumnClassName()

MySQL Type NameReturn value of GetColumnTypeNameReturn value of GetColumnClassName
BIT(1)BITjava.lang.Boolean
BIT( > 1)BITbyte[]
TINYINT(1) SIGNED, BOOLEANIf tinyInt1isBit=true and transformedBitIsBoolean=false: BITIf tinyInt1isBit=true and transformedBitIsBoolean=true: BOOLEANIf tinyInt1isBit=false: TINYINTIf tinyInt1isBit=true and transformedBitIsBoolean=false: java.lang.BooleanIf tinyInt1isBit=true and transformedBitIsBoolean=true: java.lang.BooleanIf tinyInt1isBit=false: java.lang.Integer
TINYINT( > 1) SIGNEDTINYINTjava.lang.Integer
TINYINT( any ) UNSIGNEDTINYINT UNSIGNEDjava.lang.Integer
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)]INTEGERjava.lang.Integer
INT,INTEGER[(M)] UNSIGNEDINTEGER UNSIGNEDjava.lang.Long
BIGINT[(M)]BIGINTjava.lang.Long
BIGINT[(M)] UNSIGNEDBIGINT UNSIGNEDjava.math.BigInteger
FLOAT[(M,D)]FLOATjava.lang.Float
DOUBLE[(M,B)] [UNSIGNED]DOUBLEjava.lang.Double (regardless of whether it is UNSIGNED or not)
DECIMAL[(M[,D])] [UNSIGNED]DECIMALjava.math.BigDecimal (regardless of whether it is UNSIGNED or not)
DATEDATEjava.sql.Date
DATETIMEDATETIMEjava.time.LocalDateTime
TIMESTAMP[(M)]TIMESTAMPjava.sql.Timestamp
TIMETIMEjava.sql.Time
YEAR[(2|4)]YEARIf 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.
CHAR(M)CHARjava.lang.String
VARCHAR(M)VARCHARjava.lang.String
BINARY(M), CHAR(M) BINARYBINARYbyte[]
VARBINARY(M), VARCHAR(M) BINARYVARBINARYbyte[]
BLOBBLOBbyte[]
TINYBLOBTINYBLOBbyte[]
MEDIUMBLOBMEDIUMBLOBbyte[]
LONGBLOBLONGBLOBbyte[]
TEXTTEXTjava.lang.String
TINYTEXTTINYTEXTjava.lang.String
MEDIUMTEXTMEDIUMTEXTjava.lang.String
LONGTEXTLONGTEXTjava.lang.String
JSONJSONjava.lang.String
GEOMETRYGEOMETRYbyte[]
ENUM(‘value1’,‘value2’,…)CHARjava.lang.String
SET(‘value1’,‘value2’,…)CHARjava.lang.String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值