日期:2014-05-16  浏览次数:20397 次

Java,JDBC和MySQL类型--MySql数据库 博客分类: 基础 MySQLJavaJDBCSQLJ# MySQL Connector/J在处理My

Java,JDBC和MySQL类型--MySql数据库


MySQL Connector/J在处理MySQL数据类型和Java数据类型的转换处理方面十分灵活。?

尽管可能会出现舍入、溢出或精度损失,当在通常情况下,能够将任何MySQL数据类型转换为java.lang.String,并能将任何数值类型转换为Java数值类型。?

从Connector/J 3.1.0开始,按照JDBC规范的要求,JDBC驱动程序将发出警告或抛出DataTruncation异常,除非通过使用“jdbcCompliantTruncation”属性并将其设为“假”,对连接进行相应配置取消了前述要求。?

在下面的表格中,列出能可靠工作的转换:?

表26.2. 转换表?

下述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?

注释:?
与希望转换的MySQL数据类型相比,如果选择了精度较低的Java数值类型,可能会出现舍入、溢出或精度损失。?

DATE, TIME, DATETIME, TIMESTAMP?
java.lang.String, java.sql.Date, java.sql.Timestamp?


在MySQL类型和Java类型之间,ResultSet.getObject()方法采用了下述类型转换方式,在可能的情况下遵从JDBC规范:?


表26.3. 用于ResultSet.getObject()的MySQL类型和Java类型?

MySQL类型名称??????????????????????????????????? 以Java类返回?

BIT(1) (new in MySQL-5.0)?????????????? java.lang.Boolean?
BIT( > 1) (new in MySQL-5.0)??????????? byte[]?

TINYINT??????????????????????????????? java.lang.Boolean,如果将配置属?
???????????????????????????????????????????? 性“tinyInt1isBit”设为“真”(默认值),并将存储大小设为“1”;或java.lang.Integer,如果不是的话。?

BOOL ,??????????????????????????????? BOOLEAN?
???????????????????????????????????? 请参见上面的TINYINT,它们目前是TINYINT(1)的别名。?

SMALLINT[(M)] [UNSIGNED]????????????? java.lang.Integer(无论是否为UNSIGNED)?

MEDIUMINT[(M)] [UNSIGNED]???????????? java.lang.Integer(无论是否为UNSIGNED)?

INT,INTEGER[(M)] [UNSIGNED]??????????? java.lang.Integer,如果是UNSIGNED,java.lang.Long?

BIGINT[(M)] [UNSIGNED]???????????????? java.lang.Long,如果是UNSIGNED,java.math.BigInteger?

FLOAT[(M,D)]????????????????????????? java.lang.Float?

DOUBLE[(M,B)]???????????????????????? java.lang.Double?

DECIMAL[(M[,D])]????????????????????? java.math.BigDecimal?

DATE????????????????????????????????? java.sql.Date?

DATETIME????????????????????????????? java.sql.Timestamp?

TIMESTAMP[(M)]??????????????????????? java.sql.Timestamp?

TIME????????????????????????????????? java.sql.Time?

YEAR[(2|4)]????????????????????????? java.sql.Date(日期设为2月1日晚上2点)?

CHAR(M)????????????????????????????? java.lang.String(除非列的字符集是BINARY),然后返回字节[]?

VARCHAR(M) [BINARY]????????????????? java.lang.String(除非列的字符集是BINARY),然后返回字节[]?

BINARY(M)???????????????????????????? byte[]?

VARBINARY(M)????????????????????????? byte[]?

TINYBLOB????????????????????????????? byte[]?

TINYTEXT????????????????????????????? java.lang.String?

BLOB????????????????????????????????? byte[]?

TEXT????????????????????????????????? java.lang.String?

MEDIUMBLOB??????????????????????????? byte[]?

MEDIUMTEXT??????????????????????????? java.lang.String?

LONGBLOB????????????????????????????? byte[]?

LONGTEXT????????????????????????????? java.lang.String?

ENUM('value1','value2',...)?????????? java.lang.String?

SET('value1','value2',...)???????????? java.lang.String?