1、sql.Date
sql包中的日期類Date是util包中Date類的子類,實際上也是util.Date類的子集。它只處理年月日,而忽略小時和分秒,用以代表SQL的DATE信息。
Date類的構(gòu)造方法為:
public Date(int year, int mouth, int day)
其中參數(shù)格式同util.Date類的構(gòu)造方法一樣,年參數(shù)為所需設(shè)定的年份減去1900所得的整數(shù)值,月參數(shù)為0至11,日參數(shù)為1至31。如1998年1月23日所對應(yīng)創(chuàng)建日期類的方法調(diào)用為:
Date d=new Date(98,0,23);
Date類還提供兩個與String類互相轉(zhuǎn)換的方法,分別是:
public static Date valueOf(String s)
將字符串類參數(shù)轉(zhuǎn)換為日期類對象。其中String類參數(shù)S的格式為“年-月-日”,加“1997-04-12”。
public String toString()
將日期類對象轉(zhuǎn)換為String類對象表示,同樣采用“年-月-日”的格式。
2、sql.Time
該類是util.Date類的子類,也是它的一個子集。在Time類里,只處理小時和分秒,代表SQL的TIME類型。它與sql.Date合起來才表示完整的util.Date類信息。
Time類的構(gòu)造方法為:
public Time(int hour,int minute,int second)
其中小時參數(shù)值為0至23,分秒?yún)?shù)取值均為0至59。
與sql.Date一樣,Time類也定義了兩個與String類互相轉(zhuǎn)換的函數(shù)ValueOf和String。不同的是String類對象的格式為“小時:分:秒”,如“12:26:06”。
3、sql.Timestamp
這個類也是util.Date類的子類,其中除了包含年月日、小時和分秒和信息之外,還加入了納秒信息(nanosecond),1納秒即1毫微秒。Timestamp類用來代表SQL時間戳(Timestamp)類型信息。
Timestamp類的構(gòu)造方法為:
public Timestamp(int year, int mouth, int date, int hour, int minute, int second, int nano)其中納秒?yún)?shù)的取值從0至999,999,999,其余各參數(shù)同前。
Timestamp類特別定義了設(shè)置和獲得納秒信息的方法,分別是
public getnanos()
獲取時間戳的納秒部分
public void setNanos(int n)
以給定數(shù)值設(shè)置時間戳的納秒部分
4、sql.Types
Types類是Object類的直接子類。在這個類中以靜態(tài)常量的形式定義了可使用的SQL的數(shù)值類型。所有這些類型常量都以前綴
public final static int
的形式標(biāo)明是公有靜態(tài)整數(shù),且不可改動。具體的類型名和含義如表11.1所示。其中OTHER用來代表數(shù)據(jù)庫定義的特殊數(shù)據(jù),可以用getObject或setObject方法將其映射為一個Java的Object對象。
表11.1 Types中定義的SQL類型
類型名
|
含義
|
BIGINT
|
長整型數(shù)
|
BINARY
|
二進制數(shù)
|
BIT
|
比特數(shù)
|
CHAR
|
字符型
|
DATE
|
日期型
|
DECIMAL
|
十進制數(shù)
|
DOUBLE
|
雙精度數(shù)
|
FLOAT
|
浮點數(shù)
|
INTEGER
|
整數(shù)
|
LONGVARBINARY
|
可變長型二進制數(shù)
|
LONGVARCHAR
|
可變長型字符
|
NULL
|
空類型
|
NUMERIC
|
數(shù)值型
|
OTHER
|
其他類型
|
REAL
|
實數(shù)
|
SMALLINT
|
短整型
|
TIME
|
時間類型
|
TIMESTAMP
|
時間戳類型
|
TINYINT
|
微整型
|
VARBINARY
|
可變二進制數(shù)
|
VARCHAR
|
可變字符型
|
二、SQL與Java
由于SQL數(shù)據(jù)類型與Java的數(shù)據(jù)類型不一致,因而在使用Java類型的應(yīng)用程序與使用SQL類型的數(shù)據(jù)庫之間,需要某種讀寫類型轉(zhuǎn)換機制。實際上我們前面介紹的ResultSet類的“get”系列方法,Statement及其子類的“set“系列方法和registerOutParameter方法,都是這一轉(zhuǎn)換機制的組成部分。
需要進行的讀寫轉(zhuǎn)換包括三種情況:
第一種情況是從數(shù)據(jù)庫中讀取數(shù)值后,存放在ResultSet對象中的是SQL類型的數(shù)據(jù)。而調(diào)用“get”系列方法時,JDBC才將SQL類型轉(zhuǎn)換為指定的Java類型
。在一般情形下,SQL類型相對應(yīng)的Java類型如表11-2所示。
表11.2 SQL類型一般所對應(yīng)的Java類型
SQL type
|
Java type
|
CHAR
|
java.lang.String
|
VARCHAR
|
java.lang.String
|
LONGVARCHAR
|
java.lang.String
|
NUMERIC
|
java.lang.Bignum
|
DECIMAL
|
java.lang.Bignum
|
BIT
|
boolean
|
TINYINT
|
byte
|
SMALLINT
|
short
|
INTEGER
|
int
|
BIGINT
|
long
|
REAL
|
float
|
FLOAT
|
double
|
DOUBLE
|
double
|
BINARY
|
byte[]
|
VARBINARY
|
byte[]
|
LONGVARBINARY
|
byte[]
|
DATE
|
java.sql.Date
|
TIME
|
java.sql.Time
|
TIMESTAMP
|
java.sql.Timestamp
|
當(dāng)然,在使用時用戶可以指定將SQL類型轉(zhuǎn)換為某個需要的特定類型而不遵循表11.2。例如在結(jié)果集中的某個FLOAT型數(shù)值,依標(biāo)準(zhǔn)轉(zhuǎn)換應(yīng)用使用getDouble方法獲取,但實際上按用戶的不同需求也可以使用getFloat,getInt,甚至gefByte方法獲取,但只是有可能影響數(shù)值精確度。