前言
MySQL Connector/J 對於 MySql 數據類型和 Java 數據類型之間的轉換是很靈活的:
一般來講,任何 MySql 數據類型都可以被轉換為一個 java.lang.String。
任何 MySql 數字類型都可以被轉換為任何一種 Java 數字類型。
(當然這樣也可能出一些四舍五入,溢出,精度丟失之類的問題)。
Java基礎類型與包裝類型
a)
如果數據庫字段是允許為空的,使用包裝類。
如果不允許為空,使用包裝的時候,如果你往數據庫插入null值,此時就會拋出異常。
然后你就可以對異常進行捕獲並處理。
b)
使用基本數據類型的時候,如果字段是NULL,那么JDBC會返回0,但是這里會有一個問題。
有可能0在你的業務邏輯代表着特定含義,這時候就可能出現一些意想不到的后果。
總結:在項目中去使用包裝類型而不是基本數據類型,這樣可以使你編寫代碼更簡單
ResultSet.getObject() 對 MySql 類型和 Java 類型轉換表
MySql 類型名 |
GetColumnClassName 返回值 |
返回的 Java 類 |
bit(1) (MySQL-5.0) |
BIT |
java.lang.Boolean |
bit(大於1) (MySQL-5.0) |
BIT |
byte[] |
tinyint |
TINYINT |
如果 tinyInt1isBit 配置設置為 true(默認為 true),是java.lang.Boolean,存儲空間為 1;否則是為 java.lang.Integer |
bool boolean |
TINYINT |
參見 TINYINT。這些是 TINYINT(1) 另一種寫法 |
smallint(M) [unsigned] |
SMALLINT [UNSIGNED] |
java.lang.Integer(不管是否無符) |
mediumint(M) [unsigned] |
MEDIUMINT [UNSIGNED] |
java.lang.Integer |
int integer(M) [unsigned] |
INTEGER [UNSIGNED] |
java.lang.Integer;無符的話是 java.lang.Long |
bigint(M) [unsigned] |
BIGINT [UNSIGNED] |
java.lang.Long;無符的話是 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 |
如果 yearIsDateType 配置設置為 false,返回的對象類型為 java.sql.Short;如果設置為 true(默認為 true),返回的對象類型是 java.sql.Date,其具體時間是為一月一日零時零分 |
char(M) |
CHAR |
java.lang.String(除非該列字符集設置為 BINARY,那樣返回 byte[]) |
varchar(M) [binary] |
VARCHAR |
java.lang.String(除非該列字符集設置為 BINARY,那樣返回 byte[]) |
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字段類型
decimal(8,2):
有2位小數的定點數,定點數支持很大的數(甚至是超過int,bigint存儲范圍的數)
decimal不會損失精度,存儲空間會隨數據的增大而增大。double占用固定空間,較大數的存儲會損失精度。
字符串型:
定長與變長的區別,CHAR類型占用空間比較大,但是處理速度比VARCHAR快。
如果長度變化不大,最好選擇CHAR類型。對於長度不確定的,最好選擇VARCHAR。


