雅典之夏的小站
          知人者智 自知者明 Fighting!!
          Java和SQL各自有一套自己定義的數(shù)據(jù)類(lèi)型(jsp的數(shù)據(jù)類(lèi)型實(shí)際上就是Java的數(shù)據(jù)類(lèi)型),我們要在Jsp程序和數(shù)據(jù)庫(kù)管理系統(tǒng)之間正確的交換數(shù)據(jù),必然要將二者的數(shù)據(jù)類(lèi)型進(jìn)行轉(zhuǎn)換。先讓我們來(lái)看兩個(gè)表:

          表SQL到Java數(shù)據(jù)類(lèi)型影射表

          SQL 數(shù)據(jù)類(lèi)型
          JAVA數(shù)據(jù)類(lèi)型

          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數(shù)據(jù)類(lèi)型影射表

          JAVA數(shù)據(jù)類(lèi)型
          SQL 數(shù)據(jù)類(lèi)型

          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




          這里,大伙要注意了,并不是所有的數(shù)據(jù)類(lèi)型在各種數(shù)據(jù)庫(kù)管理系統(tǒng)中都被支持。下面,就幾種常用的數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)化進(jìn)行說(shuō)明:



          (1) CHAR, VARCHAR, 和 LONGVARCHAR



          在SQL語(yǔ)言中,有三種分別表示不同長(zhǎng)度的字符類(lèi)型CHAR, VARCHAR, 和 LONGVARCHAR,在Java/Jsp中并沒(méi)有相應(yīng)的三種不同的數(shù)據(jù)類(lèi)型與之一一對(duì)應(yīng),JDBC的處理方法是將其與String或者char[]對(duì)應(yīng)起來(lái)。在實(shí)際編程中不必對(duì)著三種SQL數(shù)據(jù)類(lèi)型進(jìn)行區(qū)分,全部將他們轉(zhuǎn)化為Sting或者char[]就可以了。而且通常使用應(yīng)用的非常普遍的String類(lèi)型。我們還可以利用String類(lèi)提供的方法將一個(gè)String對(duì)象轉(zhuǎn)化為char[],或者用char[]為參數(shù)構(gòu)造一個(gè)Stirng對(duì)象。

          對(duì)于定長(zhǎng)度的SQL數(shù)據(jù)類(lèi)型CHAR(n),當(dāng)從數(shù)據(jù)庫(kù)管理系統(tǒng)中獲得的結(jié)果集提取該類(lèi)型的數(shù)據(jù)時(shí),JDBC會(huì)為其構(gòu)造一個(gè)長(zhǎng)度為n的String對(duì)象來(lái)代表他,如果實(shí)際的字符個(gè)數(shù)不足’n’,系統(tǒng)會(huì)自動(dòng)為String對(duì)象補(bǔ)上空格。當(dāng)向數(shù)據(jù)庫(kù)管理系統(tǒng)寫(xiě)入的數(shù)據(jù)類(lèi)型應(yīng)該是CHAR(n)時(shí),JDBC也會(huì)將該String對(duì)象的末尾補(bǔ)上相應(yīng)數(shù)量的空格。

          一般情況下,CHAR, VARCHAR, LONGVARCHAR和String之間可以無(wú)差錯(cuò)的進(jìn)行轉(zhuǎn)換。但非常值得注意的是LONGVARCHAR,這種SQL的數(shù)據(jù)類(lèi)型有時(shí)在數(shù)據(jù)庫(kù)中代表的數(shù)據(jù)可能有幾兆字節(jié)的大小,超過(guò)了String對(duì)象的承受范圍。JDBC解決的辦法是用Java的Input Stream來(lái)接受這種類(lèi)型的數(shù)據(jù)[以后我們回涉及到]。Input Stream不僅支持ASCII,而且支持Unicode,我們可以根據(jù)需要進(jìn)行選擇。



          (2) DECIMAL 和 NUMERIC



          SQL的DECIMAL 和 NUMERIC通常用來(lái)表示需要一定精度的定點(diǎn)數(shù)。在Java的簡(jiǎn)單數(shù)據(jù)類(lèi)型中,沒(méi)有一種類(lèi)型與之相對(duì)應(yīng)。但從JDK1.1開(kāi)始,Sun公司在java.math.*包中加入了一個(gè)新的類(lèi)BigDecimal,該類(lèi)的對(duì)象可以與DECIMAL 、NUMERIC進(jìn)行轉(zhuǎn)換。

          另外,當(dāng)從數(shù)據(jù)庫(kù)管理系統(tǒng)中讀取數(shù)據(jù)時(shí),還可以用getString()方法來(lái)獲取DECIMAL 和 NUMERIC。



          (3) BINARY, VARBINARY, 和 LONGVARBINARY



          在編程時(shí)無(wú)須精確區(qū)分這三種SQL數(shù)據(jù)類(lèi)型,JDBC將他們統(tǒng)一影射為byte[]。其中LONGVARBINARY和LONGVARCHAR相似,可以代表幾兆字節(jié)的數(shù)據(jù),超出數(shù)組的承受范圍。解決的辦法依然是用Input Stream來(lái)接受數(shù)據(jù)。



          (4) BIT



          代表一個(gè)二進(jìn)制位的BIT類(lèi)型被JDBC影射為boolean型。



          (5) TINYINT, SMALLINT, INTEGER, 和 BIGINT



          SQL語(yǔ)言的TINYINT, SMALLINT, INTEGER, 和 BIGINT分別代表8位、16位、32位、64位的數(shù)據(jù)。他們分別被影射為Java的byte, short, int, 和 long



          (6) REAL, FLOAT, 和 DOUBLE



          SQL定義了REAL, FLOAT, DOUBLE來(lái)支持浮點(diǎn)數(shù)。JDBC將REAL影射到Java的float,將FLOAT,DOUBLE影射到j(luò)ava的double。



          (7) DATE, TIME, 和 TIMESTAMP



          SQL定義了三種和日期相關(guān)的數(shù)據(jù)類(lèi)型。 DATE代表年、月、日,TIME代表時(shí)、分、秒,TIMESTAMP結(jié)合了DATE和TIME的全部信息,而且增加了更加精確的時(shí)間計(jì)量單位。

          在java的標(biāo)準(zhǔn)類(lèi)庫(kù)中,java.util.*包中的Date類(lèi)用來(lái)表示日期和時(shí)間。但是該類(lèi)和SQL中的DATE, TIME, 和 TIMESTAMP直接影射關(guān)系并不清晰。并且,該類(lèi)也不支持TIMESTAMP的精確時(shí)間計(jì)量單位。因此,Sun公司在java.sql.*中為java.util.Date增加了三個(gè)子類(lèi):java.sql.Date,java.sql.Time ,java.sql.Timestamp,分別與SQL中的三個(gè)日期數(shù)據(jù)類(lèi)型相對(duì)應(yīng)。



          總之,關(guān)于SQL與JAVA之見(jiàn)數(shù)據(jù)類(lèi)型的轉(zhuǎn)化,還有很多細(xì)節(jié)方面的東西,這里就不一一介紹了,有需要的朋友自己可以去查一下相關(guān)文檔。這里給大家介紹一個(gè)我常去的網(wǎng)站:

          http://java.sun.com/docs/books/tutorial/jdbc。
          posted on 2005-10-27 12:52 rkind 閱讀(307) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JAVA基礎(chǔ)&數(shù)據(jù)庫(kù)
          主站蜘蛛池模板: 南和县| 峡江县| 当涂县| 合肥市| 石城县| 垦利县| 南京市| 安国市| 梅州市| 太谷县| 蓬溪县| 阿巴嘎旗| 贺兰县| 武夷山市| 曲水县| 鹤峰县| 定边县| 孟连| 淮阳县| 株洲市| 桂阳县| 施秉县| 隆尧县| 商都县| 新河县| 永胜县| 沈丘县| 灵宝市| 永定县| 正定县| 天等县| 虎林市| 资阳市| 江陵县| 乌拉特前旗| 凤凰县| 甘德县| 睢宁县| 仙居县| 夏津县| 东平县|