JDBC3.0 Specification翻譯,第四章

          Posted on 2007-05-22 21:18 LittleBug 閱讀(565) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA

          第四章    概述

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

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

          4.1建立一個(gè)連接

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

                  表現(xiàn)層邏輯

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

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

                   資源管理

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

          這個(gè)模型的一些缺點(diǎn)包括:

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

                   因?yàn)椴捎昧颂囟ǖ臄?shù)據(jù)庫實(shí)現(xiàn),降低了應(yīng)用程序的可移植性。而那些要求連接到多個(gè)數(shù)據(jù)庫的應(yīng)用程序必須知道不同廠商的數(shù)據(jù)庫之間的差異。

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

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

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


           

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

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

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

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

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

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

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

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

          4.5在J2EE平臺(tái)中的JDBC

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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 柘城县| 丘北县| 兰坪| 筠连县| 铁岭市| 宜兰市| 汝州市| 洞头县| 郓城县| 台中市| 柘城县| 英德市| 玉门市| 航空| 舒兰市| 县级市| 沙湾县| 静海县| 盐山县| 潞城市| 扎鲁特旗| 古交市| 灵寿县| 精河县| 陇川县| 梁平县| 栖霞市| 西和县| 兴宁市| 肇东市| 松阳县| 车致| 宜丰县| 拉萨市| 开原市| 阳信县| 普兰县| 读书| 房山区| 土默特左旗| 云浮市|