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

猜你喜欢

转载自cppmule.iteye.com/blog/1679552