雅典之夏的小站
          知人者智 自知者明 Fighting!!
          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。
          posted on 2005-10-27 12:52 rkind 閱讀(312) 評論(0)  編輯  收藏 所屬分類: JAVA基礎&數據庫
          主站蜘蛛池模板: 古田县| 枝江市| 砚山县| 邳州市| 南平市| 康保县| 河间市| 龙陵县| 谢通门县| 天祝| 四平市| 修武县| 准格尔旗| 龙陵县| 博客| 乌兰浩特市| 上蔡县| 琼结县| 新丰县| 马龙县| 友谊县| 天祝| 贡觉县| 锦屏县| 新泰市| 吉林市| 定州市| 洛浦县| 鱼台县| 永康市| 陈巴尔虎旗| 商洛市| 大石桥市| 毕节市| 南和县| 漳平市| 郁南县| 志丹县| 宁安市| 嵊州市| 临颍县|