2007年5月22日

          第四章    概述

          JDBC應(yīng)用程序接口為Java編程語言訪問一個或多個數(shù)據(jù)源提供了一種途徑。在大多數(shù)情況下,數(shù)據(jù)源是用SQL訪問的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。盡管如此,支持JDBC技術(shù)的驅(qū)動程序也可以訪問其他的數(shù)據(jù)源,包括遺留文件系統(tǒng)(legacy file systems)和面向?qū)ο蟮南到y(tǒng)。JDBC應(yīng)用程序接口的一個主要動機就是為應(yīng)用程序可以訪問廣泛的數(shù)據(jù)源提供標準的應(yīng)用程序接口(API)。

          這一章介紹了一些JDBC應(yīng)用程序接口的關(guān)鍵概念。除此之外,還描述了JDBC應(yīng)用程序的兩種運行環(huán)境,以及討論了不同的功能角色在每個運行環(huán)境中是怎樣被實現(xiàn)的。兩層和三層邏輯結(jié)構(gòu)能夠在大量的物理結(jié)構(gòu)上被實現(xiàn)。

          4.1建立一個連接

          JDBC應(yīng)用程序接口定義了Connection接口來表示一個到潛在數(shù)據(jù)源的連接。

          在典型情況下,JDBC應(yīng)用程序會用兩種方式中的一種來連接到目標數(shù)據(jù)源:

                   DriverManager —— 這個被充分實現(xiàn)的類在最初的JDBC1.0應(yīng)用程序接口中介紹過,它需要應(yīng)用程序裝載一個特定的驅(qū)動,這一驅(qū)動使用硬編碼的統(tǒng)一資源定位器(URL)。

                   DataSource —— 這個接口在JDBC2.0可選包應(yīng)用程序接口(Optional Package API)中介紹過。與DriverManager相比它被作為首選,因為他允許潛在數(shù)據(jù)源的細節(jié)對應(yīng)用程序透明。一個DataSource對象的屬性被設(shè)置以后可以表示一個特定的數(shù)據(jù)源。當它的getConnection方法被調(diào)用以后,Datasource的實例將會返回一個到數(shù)據(jù)源的連接。應(yīng)用程序可以通過改變Datasource對象的屬性來連接到不同的數(shù)據(jù)源,而不需要改變應(yīng)用程序的代碼。同樣的,一個DataSource可以在不改變使用它的應(yīng)用程序的代碼的前提下被改變。

          JDBC應(yīng)用程序接口還定義了DataSource接口的兩個重要擴展來支持企業(yè)級的應(yīng)用程序。這些擴展就是以下的兩個接口:

                   ConnectionPoolDataSource —— 支持物理連接高速緩沖和重用,物理連接改善了應(yīng)用程序的性能和可伸縮性。

                 XADataSource —— 提供了在分布式事務(wù)中可共享的連接。

          4.2執(zhí)行SQL表達式以及操作結(jié)果集

          一旦一個連接被建立,那么使用這個連接的應(yīng)用程序就可以用JDBC應(yīng)用程序接口對目標數(shù)據(jù)源進行查詢和更新。JDBC3.0應(yīng)用程序接口提供了對大多數(shù)實現(xiàn)了的SQL99特性的支持。因為不同的廠商都在不同的級別支持這些特性,而JDBC應(yīng)用程序接口則包括了DatabaseMetadata接口。應(yīng)用程序能夠使用此接口來確定它們使用的數(shù)據(jù)源是否支持某一特性。JDBC應(yīng)用程序接口還定義了轉(zhuǎn)義語法使得應(yīng)用程序可以訪問非標準的廠商定義的特性。轉(zhuǎn)義語法的優(yōu)點是可以使得JDBC應(yīng)用程序能夠像本地應(yīng)用程序一樣訪問相同的特性,而同時又能夠保證應(yīng)用程序的可移植性。

          應(yīng)用程序使用Connection接口中的方法來定義事務(wù)的屬性和創(chuàng)建StatementPreparedStatementCallableStatement對象。這些表達式被用來執(zhí)行SQL表達式和檢索結(jié)果集。ResultSet接口封裝SQL的查詢結(jié)果。表達式也可以被批量執(zhí)行,即允許應(yīng)用程序向數(shù)據(jù)源提交多條更新語句作為執(zhí)行的單個單元。

          JDBC應(yīng)用程序接口用RowSet接口擴展了ResultSet接口,從而為列表數(shù)據(jù)提供了一個容器,而這樣比標準結(jié)果集更加通用。一個Rowset對象是一個JavaBeans™組件,它可以在沒有連接到數(shù)據(jù)源的情況下對它進行操作。例如,一個RowSet可以被串行化,因此也可以在網(wǎng)絡(luò)之間被傳輸,這對那些想不需要JDBC驅(qū)動和數(shù)據(jù)源連接而對表格數(shù)據(jù)進行操作的小型客戶端是非常有用的。RowSet的另一個特性是能夠包含一個閱讀器來訪問任意表格形式的數(shù)據(jù),而不僅僅是關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。更進一步的,一個RowSet對象可以在當它與數(shù)據(jù)源失去連接的時候更新它的行。它可以包含一個記錄器,把那些更新寫回到潛在的數(shù)據(jù)源。

          4.2.1      支持SQL高級數(shù)據(jù)類型

          JDBC應(yīng)用程序接口定義了標準的從SQL數(shù)據(jù)類型到JDBC數(shù)據(jù)類型的映射。這包括對SQL99高級數(shù)據(jù)類型的支持,諸如BLOBCLOB,ARRAY,REF,STRUCTDISTINCTJDBC驅(qū)動也可以為用戶定義類型(UDTs)實現(xiàn)一個或多個自定義類型映射。在這個映射中,用戶定義類型(UDT)被映射到一個Java類中。JDBC3.0應(yīng)用程序接口還添加了對外部數(shù)據(jù)管理的支持,例如一個在數(shù)據(jù)源外部的文件中的數(shù)據(jù)。

          4.3兩層結(jié)構(gòu)模型

          一個兩層結(jié)構(gòu)模型按功能可以被劃分為客戶端層和服務(wù)器層,見圖4-1



          4-1 兩層結(jié)構(gòu)模型

          客戶端層包括了應(yīng)用程序和一個或多個JDBC驅(qū)動,應(yīng)用程序負責(zé)對以下職責(zé)進行處理:

                  表現(xiàn)層邏輯

                   業(yè)務(wù)邏輯

                   對多重事務(wù)和分布式事務(wù)的管理

                   資源管理

          在這個模型中,應(yīng)用程序直接與JDBC驅(qū)動交互,包括建立和管理物理連接以及處理潛在的特定的數(shù)據(jù)源的細節(jié)。應(yīng)用程序可以采用特殊的實現(xiàn)采用不標準的特性或性能調(diào)整的優(yōu)點。

          這個模型的一些缺點包括:

                   伴隨著基礎(chǔ)結(jié)構(gòu)和系統(tǒng)級的功能使得表現(xiàn)層邏輯和業(yè)務(wù)層邏輯不能分離。這就為使用一個好的體系結(jié)構(gòu)來編寫可維護性好的產(chǎn)品代碼帶來了困難。

                   因為采用了特定的數(shù)據(jù)庫實現(xiàn),降低了應(yīng)用程序的可移植性。而那些要求連接到多個數(shù)據(jù)庫的應(yīng)用程序必須知道不同廠商的數(shù)據(jù)庫之間的差異。

                   限制了可伸縮性。通常地,應(yīng)用程序在結(jié)束之前將保持一個或多個到數(shù)據(jù)庫的物理連接,這樣就限制了它支持并發(fā)應(yīng)用程序的數(shù)量。在這個模型中,性能,可伸縮性和可用性受到JDBC驅(qū)動和相應(yīng)的數(shù)據(jù)源的限制。如果一個應(yīng)用程序采用了多個驅(qū)動,它也可能需要知道每種驅(qū)動和數(shù)據(jù)源解決這些限制的不同方法。

          4.4三層結(jié)構(gòu)模型

          三層模型結(jié)構(gòu)為業(yè)務(wù)邏輯和基礎(chǔ)結(jié)構(gòu)引入了中間層服務(wù)器,見圖4-2


           

          4-2 三層結(jié)構(gòu)模型

          這個體系結(jié)構(gòu)被設(shè)計來為企業(yè)級的應(yīng)用程序提高性能,可伸縮性和可用性。三個層的功能分別為:

          1、                客戶端層 —— 為程序和人的交互實現(xiàn)表現(xiàn)層邏輯的一個層。Java程序,瀏覽器和掌上電腦(PDAs)是常見的客戶端實例。客戶端與中間層應(yīng)用程序交互而且不需要包含任何與基礎(chǔ)結(jié)構(gòu)和數(shù)據(jù)源相關(guān)的功能。

          2、                中間層服務(wù)器 —— 中間層包括:

                  和客戶端以及業(yè)務(wù)邏輯層交互的應(yīng)用程序。如果該應(yīng)用程序能夠與數(shù)據(jù)源交互,和低級的驅(qū)動應(yīng)用程序接口相比,他將更多地處理像DataSource對象和邏輯連接這些高級抽象。

                   為廣泛的應(yīng)用程序提供基礎(chǔ)的應(yīng)用程序服務(wù)器。這包括管理和共享物理連接、事務(wù)管理和屏蔽不同JDBC驅(qū)動之間的差異。最后一點使得編寫可移植性良好的應(yīng)用程序更加簡單。J2EE服務(wù)器可以實現(xiàn)應(yīng)用程序服務(wù)器這一角色。應(yīng)用程序服務(wù)器可以實現(xiàn)被應(yīng)用程序所使用的高級抽象和直接與JDBC驅(qū)動交互。

                 JDBC驅(qū)動提供到潛在數(shù)據(jù)源的連接。每個驅(qū)動程序在它所使用的數(shù)據(jù)源所支持的特性基礎(chǔ)上實現(xiàn)標準的JDBC應(yīng)用程序接口。驅(qū)動層可以屏蔽標準SQL99語法和數(shù)據(jù)源所支持的本地語法之間的差異。如果數(shù)據(jù)源不是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng),那驅(qū)動程序則使用應(yīng)用程序服務(wù)器實現(xiàn)關(guān)系層。

          3、                潛在數(shù)據(jù)源 —— 即數(shù)據(jù)駐留層。它包括關(guān)系型數(shù)據(jù)庫管理系統(tǒng),遺留文件系統(tǒng)(legacy file systems),對象型數(shù)據(jù)庫管理系統(tǒng),數(shù)據(jù)倉庫,電子表格或者其他形式的數(shù)據(jù)。唯一的要求就是有相應(yīng)的支持JDBC應(yīng)用程序接口的驅(qū)動程序。

          4.5在J2EE平臺中的JDBC

              J2EE組件,例如JavaServer™ Pages,Servlets和企業(yè)級Java Beans™EJB™)組件,常常需要使用JDBC應(yīng)用程序接口來訪問關(guān)系型數(shù)據(jù)。當J2EE組件使用了JDBC應(yīng)用程序接口以后,那么可以使用相應(yīng)的容器來管理它們的事務(wù)和數(shù)據(jù)源。這意味著J2EE組件開發(fā)人員可以不直接使用JDBC應(yīng)用程序接口的事務(wù)管理和數(shù)據(jù)源管理的工具。具體細節(jié)請參考J2EE平臺規(guī)范。

          posted @ 2007-05-22 21:18 LittleBug 閱讀(565) | 評論 (0)編輯 收藏

          第三章 新特性概述
          3.1變化

          JDBC3.0在以下領(lǐng)域有所改變:

               保存點(Savepoint)支持

          添加了保存點接口,此接口包含了新的方法來對一個指定的保存點進行設(shè)置,釋放或者回滾事務(wù)。

                通過連接池重用預(yù)處理語句(Prepared Statments)

          為部署者提供了通過連接來控制預(yù)處理語句怎樣被共享和重用的能力。

               配置連接池

          ConnectionPoolDatasource接口定義了大量屬性。這些屬性能夠描述通過Datasource對象創(chuàng)建的PooledConnection對象怎樣被共享。

               對參數(shù)元數(shù)據(jù)的檢索

          添加了ParameterMetadata接口,此接口描述了預(yù)處理語句(Prepared Statements)的參數(shù)個數(shù),類型和屬性。

             對自動產(chǎn)生鍵的檢索

          添加了從那些能夠自動產(chǎn)生值的列來檢索值的手段。

               打開多個結(jié)果集(ResultSet)對象的能力

          添加了getMoreResults(int)這一方法,此方法提供了一個參數(shù),這一個參數(shù)定義了Statement對象返回的ResultSet對象在返回任何并發(fā)的ResultSet對象之前是否應(yīng)該被關(guān)閉。

               通過名字向CallableStatment對象傳遞參數(shù)

          添加了一個新方法,此方法可以通過一個字符串來標識CallableStatement對象的參數(shù)。

               對可控制游標的支持

          添加了指定ResultSet對象的可控制游標的能力。

               布爾數(shù)據(jù)類型

          添加了數(shù)據(jù)類型java.sql.Types.BOOLEANBOOLEANBIT是在邏輯上等價的。

               BlobClob對象中的數(shù)據(jù)進行內(nèi)部更新

          添加了新的方法允許BlobClob對象包含的數(shù)據(jù)被改變。

               檢索和更新被Ref對象引用的對象

          添加了新的方法來檢索被Ref對象引用的對象。也添加了更新被Ref對象引用的對象的能力。

               更新包含BLOB,CLOB,ARRAYREF類型的列

          ResultSet接口添加了updateBlob,updateClob,updateArrayupdateRef方法。

               DATALINK/URL數(shù)據(jù)類型

          添加了新的數(shù)據(jù)類型java.sql.Types.DATALINK,允許JDBC驅(qū)動存儲和檢索對外部數(shù)據(jù)的引用。

               轉(zhuǎn)化組(Transform groups)和類型映射

          描述了轉(zhuǎn)化組的作用和在元數(shù)據(jù)中這一作用是怎樣被反映的。

               JDBC SPI(服務(wù)提供者接口)和連接器體系結(jié)構(gòu)的關(guān)系

          在第19章“和連接器的關(guān)系”中描述了JDBC SPI和連接器體系結(jié)構(gòu)的關(guān)系。

               數(shù)據(jù)庫元數(shù)據(jù)(DatabaseMetadata) APIs

          為了檢索SQL類型體系添加了元數(shù)據(jù)。具體細節(jié)參見此規(guī)范。

          參見第五章“類和接口”中受到這些改變的影響的類和接口的清單。

          posted @ 2007-05-22 21:14 LittleBug 閱讀(367) | 評論 (0)編輯 收藏

          第二章 目標

          JDBC應(yīng)用程序接口是成熟的技術(shù),它早在19971月就被提出。在它最初發(fā)行的時候,JDBC應(yīng)用程序接口注重于提供一個基本的調(diào)用級的到SQL數(shù)據(jù)庫的接口。而JDBC2.1規(guī)范和2.0可選擇包規(guī)范則擴展了JDBC的范圍。這兩個規(guī)范包括了對更多高級應(yīng)用程序的支持和使用JDBC應(yīng)用程序接口的應(yīng)用程序服務(wù)器為了運行于它們之上的應(yīng)用程序的性能所要求的新特性的支持。

          JDBC3.0規(guī)范的總體目標是補上那些在很少方面的功能缺失。以下的清單列出了JDBC以及JDBC3.0所特有的目標和設(shè)計原理:

          1、 適合J2EEJ2SE平臺

          JDBC應(yīng)用程序接口是Java平臺的組成技術(shù)。因此,JDBC3.0應(yīng)該和Java2企業(yè)版和Java2標準版的總體方向保持一致。

          2、 SQL99保持一致

          JDBC應(yīng)用程序接口提供了從Java編寫的應(yīng)用程序到標準SQL的編程訪問。在JDBC2.0開發(fā)的過程中,SQL99規(guī)范還處在一種變化不定的情況下?,F(xiàn)在SQL99規(guī)范是一個公開的標準,它包括了被數(shù)據(jù)庫管理系統(tǒng)廠商廣泛支持的以及那些被很少廠商支持的特性。JDBC3.0的目標就是實現(xiàn)SQL99中那些極可能在將來五年里會被廣泛支持的特性的子集。

          3、 合并之前版本的規(guī)范

          此規(guī)范合并了之前三版JDBC規(guī)范以提供一份獨立的關(guān)于JDBC應(yīng)用程序接口的規(guī)范。

          4、 提供廠商中立的對普通特性的訪問

          JDBC應(yīng)用程序接口努力實現(xiàn)對被不同廠商普遍支持的特征的高性能的訪問。目標是在一定程度上提供本地應(yīng)用程序能完成的對特性的訪問。因此,JDBC應(yīng)用程序接口必須足夠全面和靈活以顧及大量的實現(xiàn)方式。

          5、 繼續(xù)保持對SQL的注重

          JDBC應(yīng)用程序接口一直注重于從Java編程語言到關(guān)系型數(shù)據(jù)的訪問。JDBC3.0將繼續(xù)注重于這一點。JDBC3.0不排除和其它技術(shù)交互,包括XML、CORBA和非關(guān)系型數(shù)據(jù),但是最主要的目標將仍然是和關(guān)系型數(shù)據(jù)和SQL交互。

          6、 為工具和更高層的應(yīng)用程序接口提供基礎(chǔ)

          JDBC應(yīng)用程序接口提供標準的應(yīng)用程序接口來訪問廣泛的數(shù)據(jù)源或者保留系統(tǒng)(Legacy Systems)。通過JDBC應(yīng)用程序接口的抽象,實現(xiàn)方式的不同之處也變得透明了。這使得JDBC對于那些想生產(chǎn)輕便工具和應(yīng)用程序的廠商來說,是一個不可多得的目標平臺。

          因為JDBC是一個從Java編程語言到SQL的調(diào)用級的接口,所以,JDBC應(yīng)用程序接口也適合作為那些像EJB2.0容器管理持久和SQLJ(注:SQLJ是一個與Java編程語言緊密集成的嵌入式SQL版本)這些高級程序的基礎(chǔ)。

          7、 保持它的簡單

          JDBC應(yīng)用程序接口被設(shè)計為簡單易懂的接口,但是通過它能夠編寫更復(fù)雜的實體。這一目標是通過定義許多簡潔,擁有單一功能的方法來代替通過標志參數(shù)控制的少量的復(fù)雜而擁有多功能的方法來實現(xiàn)的。

          8、 增強可靠性、實用性和靈活性

          可靠性、實用性和靈活性是J2EEJ2SE平臺的主題,也是Java平臺未來的方向。JDBC3.0應(yīng)用程序接口通過增強對若干領(lǐng)域的支持體現(xiàn)了這些主題,這些領(lǐng)域包括資源管理,通過邏輯連接重用預(yù)處理語句(prepared statements)以及錯誤處理。

          9、 保留對現(xiàn)有應(yīng)用程序和驅(qū)動程序的向后兼容性

          現(xiàn)有的支持JDBC技術(shù)的驅(qū)動和使用這些驅(qū)動的應(yīng)用程序在支持JDBC3.0Java虛擬機上必須能夠繼續(xù)工作。對于那些只使用了先前版本的JDBC應(yīng)用程序接口的特性,但是沒有使用JDBC2.0反對的特性的應(yīng)用程序,將不需要任何改變而正常運行。現(xiàn)有的應(yīng)用程序移植到JDBC3.0技術(shù)上是件簡單的事情。

          10、允許對連接器的向前兼容

          連接器的體系結(jié)構(gòu)定義了一個標準的方法來打包和部署資源適配器。這使得J2EE容器可以通過外部資源集成連接器的連接、事務(wù)和安全管理。

          JDBC3.0應(yīng)用程序接口提供了從JDBC驅(qū)動程序移植到連接器體系的途徑。這使得那些使用JDBC技術(shù)的產(chǎn)品的廠商更多地轉(zhuǎn)移到使用連接器應(yīng)用程序接口(Connector API)成為可能。希望這些廠商會在他們現(xiàn)有的數(shù)據(jù)源工具上寫上“資源管理器封裝”,這樣這些工具就能夠在連接器框架中被重用。

          11、 清楚地規(guī)定需求

          JDBC規(guī)范的需求應(yīng)該是明確的和容易識別的。JDBC3.0規(guī)范和Javadoc文檔規(guī)定了哪些特性是必需 的,而哪些特性是可選的。

          posted @ 2007-05-22 21:12 LittleBug 閱讀(571) | 評論 (0)編輯 收藏

          第一章 緒論

          1.1   JDBC應(yīng)用程序接口

          JDBC™應(yīng)用程序接口提供了從Java™編程語言編程訪問關(guān)系數(shù)據(jù)的能力。通過使用JDBC應(yīng)用程序接口,Java編程語言寫的應(yīng)用程序能夠執(zhí)行SQL表達式,檢索結(jié)果集和把改變傳回潛在的數(shù)據(jù)源。JDBC應(yīng)用程序接口還可以和在分布式的、異源的環(huán)境中的多種數(shù)據(jù)源進行交互。

          JDBC應(yīng)用程序接口基于X/Open SQL CLI,ODBC也是建立在此基礎(chǔ)上。JDBC提供了從Java編程語言到X/Open CLISQL標準定義的抽象和概念的自然、簡單的映射。

          自從19971月被提出,JDBC應(yīng)用程序接口就被廣泛接受和實現(xiàn)。它的靈活性考慮到了大量的實現(xiàn)方式。

          1.2   平臺

          JDBC應(yīng)用程序接口是Java平臺的一部分,Java平臺包括了Java™2標準版(J2SE™)和Java2™企業(yè)版(J2EE™)。JDBC3.0被分成了兩個包:java.sqljavax.sql。這兩個包都被包括到了J2SEJ2EE平臺中。

          1.3 目標讀者

          此規(guī)范主要面向以下幾類產(chǎn)品的廠家:

               實現(xiàn)JDBC應(yīng)用程序接口的驅(qū)動程序

               提供驅(qū)動層以上的中間層服務(wù)的應(yīng)用程序服務(wù)器

               使用JDBC應(yīng)用程序接口提供服務(wù)的工具,如應(yīng)用程序生成器

                 此規(guī)范也打算為以下目的服務(wù):

               在他們的程序中使用JDBC應(yīng)用程序接口的最終用戶的一份說明書

               開發(fā)基于JDBC應(yīng)用程序接口的其它應(yīng)用程序接口的程序員的一個起點

          1.4   感謝

          作者要感謝以下專家組成員,因為他們?yōu)榇艘?guī)范做出了寶貴的貢獻:

                ElhamChandler, Informix

                Stefan Dessloch, IBM

                John Goodson, Merant

                Jay Hiremath, Bluestone

                Viquar Hussain, Inprise

                Prabha Krishna, Oracle

                Scott Marlow, Silverstream

                Kuldip Pathak, Informix

                David Schorow, Compaq

                Yeh-Heng Sheng, Informix

                Mark Spotswood, BEA

                Satish Viswanatham, iPlanet

                 Maydene Fisher 曾經(jīng)很有耐心地把我們寫的東西翻譯成英語。

                 Jennifer Ball 也從書寫方式轉(zhuǎn)變成為我們所希望的用圖表表示的方式來表達。

                 Graham Hamilton, Rick Cattell, Mark Hapner, Seth White以及許多其他曾經(jīng)為JDBC技術(shù)工作的人

                 使此規(guī)范的出版成為可能。

          posted @ 2007-05-22 21:10 LittleBug 閱讀(423) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 奉贤区| 望谟县| 太仆寺旗| 门头沟区| 临沭县| 清流县| 彩票| 南宁市| 昔阳县| 剑阁县| 福建省| 八宿县| 辉县市| 和平区| 龙南县| 泸西县| 屯门区| 乌拉特前旗| 措勤县| 哈巴河县| 西丰县| 阿拉善右旗| 汝南县| 淮阳县| 隆安县| 龙岩市| 克东县| 满城县| 榆中县| 南部县| 兴业县| 繁昌县| 霍城县| 连平县| 兰西县| 昭平县| 常熟市| 方城县| 阜康市| 阜新市| 东乡县|