26.3.3.3. Java,JDBC和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 |