jdbc筆記四,關於數據類型
Java和SQL各自有一套自己定義的數據類型(jsp的數據類型實際上就是Java的數據類型),我們要在Jsp程序和數據庫管理系統之間正確的交換數據,必然要將二者的數據類型進行轉換。先讓我們來看兩個表:
表SQL到Java數據類型影射表
SQL 數據類型
JAVA數據類型
CHAR
String
VARCHAR
String
LONGVARCHAR
String
NUMERIC
java.math.BigDecimal
DECIMAL
java.math.BigDecimal
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
Java到SQL數據類型影射表
JAVA數據類型
SQL 數據類型
String
VARCHAR or LONGVARCHAR
java.math.BigDecimal
NUMERIC
Boolean
BIT
Byte
TINYINT
Short
SMALLINT
Int
INTEGER
Long
BIGINT
Float
REAL
Double
DOUBLE
byte[]
VARBINARY or LONGVARBINARY
java.sql.Date
DATE
java.sql.Time
TIME
java.sql.Timestamp
TIMESTAMP
這裏,大夥要注意了,並不是所有的數據類型在各種數據庫管理系統中都被支持。下面,就幾種常用的數據類型之間的轉化進行說明:
(1) CHAR, VARCHAR, 和 LONGVARCHAR
在SQL語言中,有三種分別表示不同長度的字符類型CHAR, VARCHAR, 和 LONGVARCHAR,在Java/Jsp中並沒有相應的三種不同的數據類型與之一一對應,JDBC的處理方法是將其與String或者char[]對應起來。在實際編程中不必對着三種SQL數據類型進行區分,全部將他們轉化爲Sting或者char[]就可以了。而且通常使用應用的非常普遍的String類型。我們還可以利用String類提供的方法將一個String對象轉化爲char[],或者用char[]爲參數構造一個Stirng對象。
對於定長度的SQL數據類型CHAR(n),當從數據庫管理系統中獲得的結果集提取該類型的數據時,JDBC會爲其構造一個長度爲n的String對象來代表他,如果實際的字符個數不足’n’,系統會自動爲String對象補上空格。當向數據庫管理系統寫入的數據類型應該是CHAR(n)時,JDBC也會將該String對象的末尾補上相應數量的空格。
一般情況下,CHAR, VARCHAR, LONGVARCHAR和String之間可以無差錯的進行轉換。但非常值得注意的是LONGVARCHAR,這種SQL的數據類型有時在數據庫中代表的數據可能有幾兆字節的大小,超過了String對象的承受範圍。JDBC解決的辦法是用Java的Input Stream來接受這種類型的數據[以後我們回涉及到]。Input Stream不僅支持ASCII,而且支持Unicode,我們可以根據需要進行選擇。
(2) DECIMAL 和 NUMERIC
SQL的DECIMAL 和 NUMERIC通常用來表示需要一定精度的定點數。在Java的簡單數據類型中,沒有一種類型與之相對應。但從JDK1.1開始,Sun公司在java.math.*包中加入了一個新的類BigDecimal,該類的對象可以與DECIMAL 、NUMERIC進行轉換。
另外,當從數據庫管理系統中讀取數據時,還可以用getString()方法來獲取DECIMAL 和 NUMERIC。
(3) BINARY, VARBINARY, 和 LONGVARBINARY
在編程時無須精確區分這三種SQL數據類型,JDBC將他們統一影射爲byte[]。其中LONGVARBINARY和LONGVARCHAR相似,可以代表幾兆字節的數據,超出數組的承受範圍。解決的辦法依然是用Input Stream來接受數據。
(4) BIT
代表一個二進制位的BIT類型被JDBC影射爲boolean型。
(5) TINYINT, SMALLINT, INTEGER, 和 BIGINT
SQL語言的TINYINT, SMALLINT, INTEGER, 和 BIGINT分別代表8位、16位、32位、64位的數據。他們分別被影射爲Java的byte, short, int, 和 long
(6) REAL, FLOAT, 和 DOUBLE
SQL定義了REAL, FLOAT, DOUBLE來支持浮點數。JDBC將REAL影射到Java的float,將FLOAT,DOUBLE影射到java的double。
(7) DATE, TIME, 和 TIMESTAMP
SQL定義了三種和日期相關的數據類型。 DATE代表年、月、日,TIME代表時、分、秒,TIMESTAMP結合了DATE和TIME的全部信息,而且增加了更加精確的時間計量單位。
在java的標準類庫中,java.util.*包中的Date類用來表示日期和時間。但是該類和SQL中的DATE, TIME, 和 TIMESTAMP直接影射關係並不清晰。並且,該類也不支持TIMESTAMP的精確時間計量單位。因此,Sun公司在java.sql.*中爲java.util.Date增加了三個子類:java.sql.Date,java.sql.Time ,java.sql.Timestamp,分別與SQL中的三個日期數據類型相對應。
總之,關於SQL與JAVA之見數據類型的轉化,還有很多細節方面的東西,這裏就不一一介紹了,有需要的朋友自己可以去查一下相關文檔。這裏給大家介紹一個我常去的網站:
http://java.sun.com/docs/books/tutorial/jdbc。
表SQL到Java數據類型影射表
SQL 數據類型
JAVA數據類型
CHAR
String
VARCHAR
String
LONGVARCHAR
String
NUMERIC
java.math.BigDecimal
DECIMAL
java.math.BigDecimal
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
Java到SQL數據類型影射表
JAVA數據類型
SQL 數據類型
String
VARCHAR or LONGVARCHAR
java.math.BigDecimal
NUMERIC
Boolean
BIT
Byte
TINYINT
Short
SMALLINT
Int
INTEGER
Long
BIGINT
Float
REAL
Double
DOUBLE
byte[]
VARBINARY or LONGVARBINARY
java.sql.Date
DATE
java.sql.Time
TIME
java.sql.Timestamp
TIMESTAMP
這裏,大夥要注意了,並不是所有的數據類型在各種數據庫管理系統中都被支持。下面,就幾種常用的數據類型之間的轉化進行說明:
(1) CHAR, VARCHAR, 和 LONGVARCHAR
在SQL語言中,有三種分別表示不同長度的字符類型CHAR, VARCHAR, 和 LONGVARCHAR,在Java/Jsp中並沒有相應的三種不同的數據類型與之一一對應,JDBC的處理方法是將其與String或者char[]對應起來。在實際編程中不必對着三種SQL數據類型進行區分,全部將他們轉化爲Sting或者char[]就可以了。而且通常使用應用的非常普遍的String類型。我們還可以利用String類提供的方法將一個String對象轉化爲char[],或者用char[]爲參數構造一個Stirng對象。
對於定長度的SQL數據類型CHAR(n),當從數據庫管理系統中獲得的結果集提取該類型的數據時,JDBC會爲其構造一個長度爲n的String對象來代表他,如果實際的字符個數不足’n’,系統會自動爲String對象補上空格。當向數據庫管理系統寫入的數據類型應該是CHAR(n)時,JDBC也會將該String對象的末尾補上相應數量的空格。
一般情況下,CHAR, VARCHAR, LONGVARCHAR和String之間可以無差錯的進行轉換。但非常值得注意的是LONGVARCHAR,這種SQL的數據類型有時在數據庫中代表的數據可能有幾兆字節的大小,超過了String對象的承受範圍。JDBC解決的辦法是用Java的Input Stream來接受這種類型的數據[以後我們回涉及到]。Input Stream不僅支持ASCII,而且支持Unicode,我們可以根據需要進行選擇。
(2) DECIMAL 和 NUMERIC
SQL的DECIMAL 和 NUMERIC通常用來表示需要一定精度的定點數。在Java的簡單數據類型中,沒有一種類型與之相對應。但從JDK1.1開始,Sun公司在java.math.*包中加入了一個新的類BigDecimal,該類的對象可以與DECIMAL 、NUMERIC進行轉換。
另外,當從數據庫管理系統中讀取數據時,還可以用getString()方法來獲取DECIMAL 和 NUMERIC。
(3) BINARY, VARBINARY, 和 LONGVARBINARY
在編程時無須精確區分這三種SQL數據類型,JDBC將他們統一影射爲byte[]。其中LONGVARBINARY和LONGVARCHAR相似,可以代表幾兆字節的數據,超出數組的承受範圍。解決的辦法依然是用Input Stream來接受數據。
(4) BIT
代表一個二進制位的BIT類型被JDBC影射爲boolean型。
(5) TINYINT, SMALLINT, INTEGER, 和 BIGINT
SQL語言的TINYINT, SMALLINT, INTEGER, 和 BIGINT分別代表8位、16位、32位、64位的數據。他們分別被影射爲Java的byte, short, int, 和 long
(6) REAL, FLOAT, 和 DOUBLE
SQL定義了REAL, FLOAT, DOUBLE來支持浮點數。JDBC將REAL影射到Java的float,將FLOAT,DOUBLE影射到java的double。
(7) DATE, TIME, 和 TIMESTAMP
SQL定義了三種和日期相關的數據類型。 DATE代表年、月、日,TIME代表時、分、秒,TIMESTAMP結合了DATE和TIME的全部信息,而且增加了更加精確的時間計量單位。
在java的標準類庫中,java.util.*包中的Date類用來表示日期和時間。但是該類和SQL中的DATE, TIME, 和 TIMESTAMP直接影射關係並不清晰。並且,該類也不支持TIMESTAMP的精確時間計量單位。因此,Sun公司在java.sql.*中爲java.util.Date增加了三個子類:java.sql.Date,java.sql.Time ,java.sql.Timestamp,分別與SQL中的三個日期數據類型相對應。
總之,關於SQL與JAVA之見數據類型的轉化,還有很多細節方面的東西,這裏就不一一介紹了,有需要的朋友自己可以去查一下相關文檔。這裏給大家介紹一個我常去的網站:
http://java.sun.com/docs/books/tutorial/jdbc。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.