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ù)值精確度。