CH11數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)課件_第1頁(yè)
CH11數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)課件_第2頁(yè)
CH11數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)課件_第3頁(yè)
CH11數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)課件_第4頁(yè)
CH11數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)課件_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第11章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)原理與設(shè)計(jì)第11章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)學(xué)習(xí)目標(biāo)本章從開(kāi)發(fā)者而不是管理者的角度來(lái)看待數(shù)據(jù)庫(kù)圍繞數(shù)據(jù)庫(kù)的應(yīng)用開(kāi)發(fā)展開(kāi),介紹數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)的演變及其現(xiàn)狀,討論常見(jiàn)的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù),并通過(guò)一些具體的代碼介紹數(shù)據(jù)庫(kù)開(kāi)發(fā)的過(guò)程本章的學(xué)習(xí)目的是:理解軟件開(kāi)發(fā)體系結(jié)構(gòu)變遷的驅(qū)動(dòng)力理解當(dāng)前主要的軟件開(kāi)發(fā)體系結(jié)構(gòu)的思想了解一些主要的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)能夠使用某種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)進(jìn)行簡(jiǎn)單的數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)第11章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)學(xué)習(xí)方法結(jié)合應(yīng)用開(kāi)發(fā)的實(shí)踐來(lái)加深對(duì)本章知識(shí)的理解在學(xué)習(xí)數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)時(shí),可將自己使用過(guò)的應(yīng)用程序或系統(tǒng)對(duì)號(hào)入座,通過(guò)具體的應(yīng)用來(lái)理解不同體系結(jié)構(gòu)的特點(diǎn)在學(xué)習(xí)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)時(shí)要聯(lián)系程序開(kāi)發(fā)實(shí)踐來(lái)加深理解不要求掌握每種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù),但要求能夠使用某種主流的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)來(lái)進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)技術(shù)在不斷更新,讀者要及時(shí)補(bǔ)充新的知識(shí)學(xué)習(xí)指南本章的重點(diǎn)是11.1和11.2節(jié)關(guān)于11.3節(jié),不要求一定要掌握VisualC++下ADO技術(shù),但是至少要掌握某種開(kāi)發(fā)環(huán)境下的某種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)第11章數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)本章面向應(yīng)用程序員,介紹數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)中的知識(shí),重點(diǎn)是介紹數(shù)據(jù)庫(kù)開(kāi)發(fā)的基本技術(shù)。具體的數(shù)據(jù)庫(kù)開(kāi)發(fā)技術(shù)與具體的開(kāi)發(fā)環(huán)境有關(guān),本書(shū)介紹VisualC++下使用ADO的開(kāi)發(fā)過(guò)程。目錄數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)11.1數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)11.2數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)實(shí)踐11.311.1數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)在20世紀(jì)90年代之前,開(kāi)發(fā)人員一直通過(guò)集成本地系統(tǒng)服務(wù)來(lái)構(gòu)建應(yīng)用程序在這種模式下,開(kāi)發(fā)人員通過(guò)嵌入式開(kāi)發(fā)語(yǔ)言或自含式語(yǔ)言訪(fǎng)問(wèn)后臺(tái)數(shù)據(jù)庫(kù),可以嚴(yán)格控制應(yīng)用程序如使用嵌入式C或嵌入式COBOL語(yǔ)言開(kāi)發(fā)訪(fǎng)問(wèn)ORACLE數(shù)據(jù)庫(kù)的應(yīng)用程序系統(tǒng);使用FoxPro自含式語(yǔ)言開(kāi)發(fā)訪(fǎng)問(wèn)FoxPro數(shù)據(jù)庫(kù)的應(yīng)用程序系統(tǒng)如今,開(kāi)發(fā)人員在很大程度上已經(jīng)擺脫了這種模式的束縛,致力于構(gòu)建具有N層復(fù)雜結(jié)構(gòu)的系統(tǒng)這種系統(tǒng)將分散在網(wǎng)絡(luò)中各處的眾多的應(yīng)用程序進(jìn)行集成,可以極大地提升應(yīng)用程序的價(jià)值在這種開(kāi)發(fā)模式下,開(kāi)發(fā)人員不必為構(gòu)建基本結(jié)構(gòu)花費(fèi)過(guò)多精力有利于集中精力挖掘軟件獨(dú)特的商業(yè)價(jià)值,縮短軟件投放市場(chǎng)的開(kāi)發(fā)周期編程效率明顯提高,軟件質(zhì)量也得到了相應(yīng)的保證11.1.1軟件開(kāi)發(fā)體系結(jié)構(gòu)概述隨著軟件系統(tǒng)的規(guī)模和復(fù)雜程度的增加,軟件體系結(jié)構(gòu)的選擇比數(shù)據(jù)結(jié)構(gòu)和算法的選擇顯得更為重要軟件體系結(jié)構(gòu)是構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件處理構(gòu)件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行加工數(shù)據(jù)構(gòu)件是被加工的信息連接構(gòu)件把體系結(jié)構(gòu)的不同部分組合連接起來(lái)最初的軟件體系結(jié)構(gòu)是客戶(hù)表示、數(shù)據(jù)和程序集中放在主機(jī)上,只有少量的圖形用戶(hù)界面(GraphicalUserInterface,簡(jiǎn)記為GUI)主機(jī)負(fù)責(zé)處理所有的業(yè)務(wù)客戶(hù)通過(guò)終端完成對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)該體系結(jié)構(gòu)要求主機(jī)具有很高的性能隨著PC機(jī)的廣泛應(yīng)用,該結(jié)構(gòu)逐漸在應(yīng)用中被淘汰11.1.1軟件開(kāi)發(fā)體系結(jié)構(gòu)概述20世紀(jì)80年代中期出現(xiàn)了Client/Server分布式計(jì)算結(jié)構(gòu),該結(jié)構(gòu)將應(yīng)用程序的處理分別放在客戶(hù)(PC機(jī))和服務(wù)器(mainframe或Server)上客戶(hù)機(jī)發(fā)出SQL請(qǐng)求,該請(qǐng)求被數(shù)據(jù)庫(kù)服務(wù)器響應(yīng),通常由服務(wù)器上的關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行處理PC機(jī)在接收到被處理的數(shù)據(jù)后實(shí)現(xiàn)顯示和業(yè)務(wù)邏輯系統(tǒng)支持模塊化開(kāi)發(fā),客戶(hù)機(jī)提供GUI供客戶(hù)輸入數(shù)據(jù)和顯示服務(wù)器返回的結(jié)果信息Client/Server結(jié)構(gòu)因其靈活性得到了極其廣泛的應(yīng)用。但對(duì)大型軟件系統(tǒng)而言,這種結(jié)構(gòu)在系統(tǒng)的部署和擴(kuò)展性方面還存在著不足該模式在僅有少量用戶(hù)的系統(tǒng)中其工作狀態(tài)較好當(dāng)越來(lái)越多的用戶(hù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),該模式暴露出它的弊端客戶(hù)端包含業(yè)務(wù)邏輯且應(yīng)用程序必須安裝在客戶(hù)端,一旦業(yè)務(wù)邏輯發(fā)生變化必須更改所有客戶(hù)端程序,給系統(tǒng)維護(hù)帶來(lái)很大的困難11.1.1軟件開(kāi)發(fā)體系結(jié)構(gòu)概述Client/Server結(jié)構(gòu)的軟件模型其特點(diǎn):將用戶(hù)的界面操作、業(yè)務(wù)邏輯放在客戶(hù)端操作將數(shù)據(jù)操作放在服務(wù)器端處理這種體系結(jié)構(gòu)無(wú)法確保數(shù)據(jù)訪(fǎng)問(wèn)的安全(從客戶(hù)程序中可以得到數(shù)據(jù)庫(kù)密碼)網(wǎng)絡(luò)資源消耗較大(因?yàn)橐3謹(jǐn)?shù)據(jù)庫(kù)聯(lián)接、數(shù)據(jù)頻繁在網(wǎng)絡(luò)中傳遞)服務(wù)器負(fù)擔(dān)過(guò)重(因?yàn)樗幚硭锌蛻?hù)機(jī)的請(qǐng)求)升級(jí)不夠方便(用戶(hù)的業(yè)務(wù)邏輯發(fā)生變化,必須更改所有客戶(hù)機(jī)的軟件)Internet的發(fā)展給傳統(tǒng)應(yīng)用軟件的開(kāi)發(fā)帶來(lái)了深刻的影響隨著越來(lái)越多的商業(yè)系統(tǒng)搬上Internet,一種新的、更具生命力的體系結(jié)構(gòu)被廣泛采用,這就是“三層/多層計(jì)算”框架11.1.2C/S體系結(jié)構(gòu)C/S兩層結(jié)構(gòu)在技術(shù)上非常成熟,具有強(qiáng)大的數(shù)據(jù)操作和事務(wù)處理能力該結(jié)構(gòu)模型思想簡(jiǎn)單,易于人們理解和接受主要特點(diǎn)是交互性強(qiáng)、具有安全的存取模式、網(wǎng)絡(luò)通信量低、響應(yīng)速度快、有利于處理大量數(shù)據(jù)隨著企業(yè)規(guī)模的日益擴(kuò)大,軟件的復(fù)雜程度不斷提高,該結(jié)構(gòu)存在以下幾個(gè)局限:程序是針對(duì)性開(kāi)發(fā),變更不夠靈活,維護(hù)和管理的難度較大。通常只局限于小型局域網(wǎng),不利于擴(kuò)展該結(jié)構(gòu)的每臺(tái)客戶(hù)機(jī)都需安裝客戶(hù)端程序,分布功能弱且兼容性差,不能實(shí)現(xiàn)快速部署安裝和配置,要求具有一定專(zhuān)業(yè)水準(zhǔn)的技術(shù)人員去完成。該結(jié)構(gòu)是單一服務(wù)器且以局域網(wǎng)為中心,難以擴(kuò)展至大型企業(yè)廣域網(wǎng)或Internet軟、硬件的組合及集成能力有限客戶(hù)機(jī)的負(fù)荷太重,不僅要實(shí)現(xiàn)表示層,還要實(shí)現(xiàn)業(yè)務(wù)邏輯層,一旦某個(gè)業(yè)務(wù)邏輯發(fā)生變化,則所有的客戶(hù)機(jī)軟件必須重新安裝。當(dāng)企業(yè)中有大量的客戶(hù)機(jī)時(shí),系統(tǒng)的性能容易變壞,且維護(hù)也相當(dāng)不方便11.1.2C/S體系結(jié)構(gòu)多層體系構(gòu)架:把一個(gè)應(yīng)用程序按功能劃分成不同的邏輯組件具有特定功能的應(yīng)用程序中的一部分稱(chēng)為一層典型的多層體系構(gòu)架一般把一個(gè)應(yīng)用程序分為三層表現(xiàn)層、業(yè)務(wù)邏輯層(或者中間層)和數(shù)據(jù)層中間件是在計(jì)算機(jī)硬件和操作系統(tǒng)之上,支持應(yīng)用軟件開(kāi)發(fā)和運(yùn)行的系統(tǒng)軟件能夠使應(yīng)用軟件相對(duì)獨(dú)立于計(jì)算機(jī)硬件和操作系統(tǒng)平臺(tái),為大型分布式應(yīng)用搭起了一個(gè)標(biāo)準(zhǔn)的平臺(tái)把大型企業(yè)分散的系統(tǒng)和技術(shù)組合在一起,實(shí)現(xiàn)大型企業(yè)應(yīng)用軟件系統(tǒng)的集成11.1.2C/S體系結(jié)構(gòu)中間件的工作機(jī)制是:客戶(hù)端上的應(yīng)用程序從網(wǎng)絡(luò)中的某個(gè)地方獲取一定的數(shù)據(jù)或服務(wù)這些數(shù)據(jù)或服務(wù)可能處于一個(gè)運(yùn)行著不同操作系統(tǒng)和特定查詢(xún)語(yǔ)言數(shù)據(jù)庫(kù)的服務(wù)器中應(yīng)用程序中負(fù)責(zé)尋找數(shù)據(jù)的部分只需訪(fǎng)問(wèn)一個(gè)中間件系統(tǒng)中間件完成到網(wǎng)絡(luò)中找到數(shù)據(jù)源或服務(wù)傳輸客戶(hù)請(qǐng)求、重組答復(fù)信息,最后將結(jié)果送回應(yīng)用程序的任務(wù)體系結(jié)構(gòu)如圖11-2所示11.1.2C/S體系結(jié)構(gòu)在網(wǎng)絡(luò)中可以有多臺(tái)中間件服務(wù)器為提高系統(tǒng)的效率,可將企業(yè)的業(yè)務(wù)進(jìn)行大類(lèi)分類(lèi)同類(lèi)業(yè)務(wù)規(guī)則的實(shí)現(xiàn)放在同一臺(tái)中間件服務(wù)器上保證企業(yè)的業(yè)務(wù)處理達(dá)到真正的分布式處理客戶(hù)機(jī)訪(fǎng)問(wèn)中間件服務(wù)器是通過(guò)其提供的接口來(lái)實(shí)現(xiàn)實(shí)現(xiàn)代碼客戶(hù)看不到將企業(yè)所有的業(yè)務(wù)規(guī)則、所有對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)都封裝在中間件中一旦企業(yè)的某個(gè)業(yè)務(wù)規(guī)則發(fā)生變化,只要其接口保持不變,客戶(hù)機(jī)的軟件就不必更新所有對(duì)數(shù)據(jù)庫(kù)的操作也封裝在中間件中,保證了數(shù)據(jù)庫(kù)的安全數(shù)據(jù)庫(kù)服務(wù)器的功能與兩層的C/S結(jié)構(gòu)一樣,其結(jié)果數(shù)據(jù)返回給中間件服務(wù)器,不是客戶(hù)機(jī)三層是多層體系結(jié)構(gòu)的基礎(chǔ)中間件服務(wù)器可以再訪(fǎng)問(wèn)中間件服務(wù)器,這樣就形成了多層體系結(jié)構(gòu)11.1.2C/S體系結(jié)構(gòu)多層體系構(gòu)架可將系統(tǒng)需求劃分成可以明確定義的服務(wù)如事務(wù)服務(wù)、名字服務(wù)等這些服務(wù)以組件的形式實(shí)現(xiàn)一個(gè)組件可以實(shí)現(xiàn)系統(tǒng)中的一種或者多種服務(wù),是這些服務(wù)的物理封裝根據(jù)系統(tǒng)的功能、性能等各方面的需求,系統(tǒng)管理員可以在網(wǎng)絡(luò)上靈活地部署這些組件可根據(jù)業(yè)務(wù)的改變靈活地對(duì)這些服務(wù)組件進(jìn)行修改,不影響其它組件,降低維護(hù)的費(fèi)用多層體系結(jié)構(gòu)的優(yōu)點(diǎn)業(yè)務(wù)規(guī)則集中、瘦客戶(hù)體系結(jié)構(gòu)、自動(dòng)錯(cuò)誤調(diào)和、負(fù)載平衡、可重用性、靈活性、可管理性、易維護(hù)性等11.1.2C/S體系結(jié)構(gòu)開(kāi)發(fā)C/S結(jié)構(gòu)應(yīng)用程序采用的主要工具有:Borland公司的Delphi7、Jbuilder2005Sybase公司的Powerbuilder10.5微軟公司的VB、VF等C/S體系結(jié)構(gòu)主要采用的編程語(yǔ)言有:VB、Delphi和Powerbuilder后臺(tái)數(shù)據(jù)庫(kù)有SQLServer2000、Oracle、DB2、Sybase等11.1.3B/S體系結(jié)構(gòu)三層B/S體系結(jié)構(gòu)客戶(hù)端只需安裝一個(gè)瀏覽器,客戶(hù)可在任何地方通過(guò)Internet網(wǎng)絡(luò)訪(fǎng)問(wèn)企業(yè)中的數(shù)據(jù)所有對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)和應(yīng)用程序的執(zhí)行由Web服務(wù)器完成B/S體系結(jié)構(gòu)也有許多不足地方,表現(xiàn)在以下幾個(gè)方面:瀏覽器只是為了進(jìn)行Web瀏覽而設(shè)計(jì)的,當(dāng)應(yīng)用于Web應(yīng)用系統(tǒng)時(shí),許多功能不能實(shí)現(xiàn)或?qū)崿F(xiàn)起來(lái)比較困難如通過(guò)瀏覽器進(jìn)行大量的數(shù)據(jù)輸入,或進(jìn)行報(bào)表的應(yīng)答都比較困難和不便復(fù)雜應(yīng)用的開(kāi)發(fā)困難雖然可用ActiveX、Java等技術(shù)開(kāi)發(fā)較為復(fù)雜的應(yīng)用,但是相對(duì)于成熟的C/S工具來(lái)說(shuō),這些技術(shù)的開(kāi)發(fā)復(fù)雜11.1.3B/S體系結(jié)構(gòu)HTTP可靠性低,有可能造成應(yīng)用故障特別是對(duì)于管理者來(lái)說(shuō),采用瀏覽器方式進(jìn)行系統(tǒng)的維護(hù)非常不安全和不方便Web服務(wù)器成為數(shù)據(jù)庫(kù)服務(wù)器的唯一客戶(hù)端所有對(duì)數(shù)據(jù)庫(kù)的連接都必須通過(guò)Web服務(wù)器實(shí)現(xiàn)Web服務(wù)器同時(shí)要處理與客戶(hù)請(qǐng)求以及與數(shù)據(jù)庫(kù)的連接當(dāng)訪(fǎng)問(wèn)量較大時(shí),Web服務(wù)器的負(fù)載過(guò)重業(yè)務(wù)邏輯和數(shù)據(jù)訪(fǎng)問(wèn)程序一般由JavaScript、VBScript等嵌入式小程序?qū)崿F(xiàn)分散在各個(gè)頁(yè)面里,難以實(shí)現(xiàn)共享,給升級(jí)和維護(hù)帶來(lái)不便由于源代碼的開(kāi)放性,商業(yè)規(guī)則很容易暴露商業(yè)規(guī)則對(duì)應(yīng)用程序來(lái)說(shuō)是非常重要的11.1.3B/S體系結(jié)構(gòu)由于存在上述問(wèn)題,提出多層B/S體系結(jié)構(gòu)多層B/S體系結(jié)構(gòu)是在三層B/S體系結(jié)構(gòu)中增加了一個(gè)或多個(gè)中間層該層使用中間件技術(shù),由相應(yīng)的應(yīng)用服務(wù)器來(lái)管理,它是多層C/S體系結(jié)構(gòu)的一種改進(jìn)體系結(jié)構(gòu)如圖11-4所示11.1.3B/S體系結(jié)構(gòu)有很多著名企業(yè)提供了應(yīng)用服務(wù)器軟件應(yīng)用服務(wù)器可直接作為Web服務(wù)器使用作為一個(gè)安全的企業(yè)級(jí)的管理信息系統(tǒng),必須將Web服務(wù)器與應(yīng)用服務(wù)器物理分開(kāi)著名的應(yīng)用服務(wù)器有:BEA公司生產(chǎn)的WeblogicApplicationServer;Borland公司生產(chǎn)的EnterpriseServerAppServerServer;Oracle公司生產(chǎn)的OracleApplicationServer;IBM公司生產(chǎn)的WebsphereApplicationServer;微軟公司生產(chǎn)的M11.1.3B/S體系結(jié)構(gòu)B/S體系結(jié)構(gòu)的主要特點(diǎn)是:分布性強(qiáng)、維護(hù)方便、開(kāi)發(fā)簡(jiǎn)單且共享性強(qiáng)、總體成本低對(duì)服務(wù)器要求過(guò)高、數(shù)據(jù)傳輸速度慢、軟件的個(gè)性化特點(diǎn)明顯降低難以實(shí)現(xiàn)傳統(tǒng)模式下的特殊功能要求如通過(guò)瀏覽器進(jìn)行大量的數(shù)據(jù)輸入或進(jìn)行報(bào)表的應(yīng)答、專(zhuān)用性打印輸出等的實(shí)現(xiàn)比較困難和不便實(shí)現(xiàn)復(fù)雜的應(yīng)用開(kāi)發(fā)有較大的困難相對(duì)非常成熟的C/S結(jié)構(gòu)的系列應(yīng)用開(kāi)發(fā)工具來(lái)說(shuō),開(kāi)發(fā)比較復(fù)雜提出一種將C/S與B/S結(jié)構(gòu)相結(jié)合的開(kāi)發(fā)方法11.1.4C/S與B/S結(jié)構(gòu)的結(jié)合這種結(jié)構(gòu)優(yōu)點(diǎn)在于:充分發(fā)揮B/S與C/S體系結(jié)構(gòu)的優(yōu)勢(shì),彌補(bǔ)了各自的不足信息發(fā)布、數(shù)據(jù)查詢(xún)、下訂單、維修服務(wù)等采用B/S結(jié)構(gòu),保持瘦客戶(hù)端的優(yōu)點(diǎn)由于Web瀏覽器和網(wǎng)絡(luò)綜合服務(wù)器都是基于工業(yè)標(biāo)準(zhǔn)的,可在所有的平臺(tái)上工作企業(yè)內(nèi)部采用C/S結(jié)構(gòu),可通過(guò)ADO/JDBC連接。這一部分只涉及到系統(tǒng)維護(hù)、數(shù)據(jù)更新等,不存在完全采用C/S結(jié)構(gòu)帶來(lái)的客戶(hù)端維護(hù)工作量大等缺點(diǎn)在客戶(hù)端可以開(kāi)發(fā)非常復(fù)雜的應(yīng)用,界面友好靈活,易于操作,能解決許多B/S存在的固有缺點(diǎn)11.1.4C/S與B/S結(jié)構(gòu)的結(jié)合對(duì)于原有基于C/S體系結(jié)構(gòu)的應(yīng)用,可以非常容易地升級(jí)到這種體系結(jié)構(gòu)只需開(kāi)發(fā)用于發(fā)布的Web界面,保留原有的C/S結(jié)構(gòu)的某些子系統(tǒng),充分地利用現(xiàn)有系統(tǒng)的資源,使得現(xiàn)有系統(tǒng)或資源無(wú)需大的改造即可以連接使用,節(jié)省投資通過(guò)在瀏覽器中嵌入ActiveX控件實(shí)現(xiàn)復(fù)雜的功能如通過(guò)瀏覽器進(jìn)行報(bào)表的應(yīng)答客戶(hù)端ActiveX控件的加盟,可豐富HTML頁(yè)面,產(chǎn)生令人驚奇的效果將服務(wù)器端劃分為Web服務(wù)器和應(yīng)用服務(wù)器兩部分應(yīng)用服務(wù)器采用組件技術(shù)實(shí)現(xiàn)多層B/S體系結(jié)構(gòu)中的商業(yè)邏輯部分,達(dá)到封裝源代碼,保護(hù)知識(shí)產(chǎn)權(quán)的目的Internet應(yīng)用程序大部分屬于分布式應(yīng)用程序,采用組件技術(shù)的一個(gè)重要特點(diǎn)就是它的處理能力能夠隨著用戶(hù)數(shù)量、數(shù)據(jù)量所需性能的提高而提高11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)目前常用的開(kāi)發(fā)體系結(jié)構(gòu)有兩種,一種是C/S體系結(jié)構(gòu),一種是B/S體系結(jié)構(gòu)開(kāi)發(fā)體系如圖11-6所示11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)常用的開(kāi)發(fā)方法有基于微軟公司的.NET平臺(tái)技術(shù)和基于SUN公司的Java技術(shù)Microsoft.NET是將互聯(lián)網(wǎng)本身作為構(gòu)建新一代操作系統(tǒng)的基礎(chǔ),是當(dāng)今計(jì)算機(jī)技術(shù)通向計(jì)算時(shí)代的一個(gè)非常重要的里程碑ASP.NET是Microsoft.NET的重要組成部分,是Web應(yīng)用程序開(kāi)發(fā)環(huán)境。ASP.NET具有如下優(yōu)點(diǎn):它構(gòu)建在CLR(CommonLanguageRuntime,通用語(yǔ)言運(yùn)行時(shí))之上,用它開(kāi)發(fā)的程序可以支持異??刂?、類(lèi)型安全、繼承和動(dòng)態(tài)編譯;采用Code-Behind技術(shù)來(lái)實(shí)現(xiàn)Web頁(yè)面表示層和商業(yè)邏輯代碼分離,從而實(shí)現(xiàn)代碼的重用;組件部署簡(jiǎn)單,并且組件在使用之前不必注冊(cè);11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)安全機(jī)制完善,還能自動(dòng)檢測(cè)內(nèi)存泄露,自動(dòng)啟動(dòng)進(jìn)程;有更高的執(zhí)行效率ASP.NET代碼是采用編譯方式執(zhí)行,從而可以建立高效率的Web應(yīng)用程序由于在ASP.NET中使用ADO.NET對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取。ADO.NET使用XML交換數(shù)據(jù),其執(zhí)行效率比傳統(tǒng)的COM(ComponentObjectModel)marshalling方式快得多ADO.NET在ADO的基礎(chǔ)上增加了許多對(duì)象如DataSet、DataReader、DataView和DataSetCommand等DataSet對(duì)象是核心,它以離線(xiàn)的方式存在于內(nèi)存中用于讀取數(shù)據(jù),讀取速度更快。11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)在ASP.NET中,對(duì)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)可以采用三種方法來(lái)實(shí)現(xiàn):利用數(shù)據(jù)庫(kù)組件通過(guò)ODBC連接來(lái)實(shí)現(xiàn);通過(guò).NET中包含的用于訪(fǎng)問(wèn)企業(yè)數(shù)據(jù)庫(kù)的數(shù)據(jù)提供程序SQLServer.NET來(lái)實(shí)現(xiàn);通過(guò).NET中包含的用于訪(fǎng)問(wèn)企業(yè)數(shù)據(jù)庫(kù)的數(shù)據(jù)提供程序OLEDB.NET來(lái)實(shí)現(xiàn)。通常選用.NET中包含的用于訪(fǎng)問(wèn)企業(yè)數(shù)據(jù)庫(kù)的程序來(lái)實(shí)現(xiàn)數(shù)據(jù)訪(fǎng)問(wèn)11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)MVC開(kāi)發(fā)模型幾乎所有現(xiàn)代網(wǎng)絡(luò)開(kāi)發(fā)框架都遵循了Model-View-Controller(模型-視圖-控制)設(shè)計(jì)模式,簡(jiǎn)稱(chēng)MVC模式MVC架構(gòu)模式是20世紀(jì)80年代中期在Smalltalk-80GUI(一種經(jīng)典的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言)實(shí)驗(yàn)室發(fā)明的MVC模式將一個(gè)軟件分為商務(wù)邏輯(Model)和顯示(View)兩部分,其好處主要有兩個(gè)方面:同一商務(wù)邏輯層(Model)可能對(duì)應(yīng)多個(gè)顯示層(View)如果商務(wù)邏輯層和顯示層放在一起,再添加一個(gè)顯示層的時(shí)候就會(huì)極大地增加組件的復(fù)雜性一個(gè)商務(wù)邏輯對(duì)著兩個(gè)顯示層的例子是:銀行帳戶(hù)的商務(wù)邏輯層對(duì)應(yīng)ATM和Internet兩個(gè)顯示層通常情況下,每次修改顯示層的時(shí)候一般并不需要修改商務(wù)邏輯層11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)MVC模型的含義Model層一般利用組件進(jìn)行設(shè)計(jì),在復(fù)雜的商務(wù)邏輯上,提供簡(jiǎn)單并且統(tǒng)一的應(yīng)用程序接口這一層負(fù)責(zé)管理應(yīng)用程序的行為和狀態(tài),響應(yīng)狀態(tài)的請(qǐng)求和改變狀態(tài)的指令View層:從Model層和Controller層獲取數(shù)據(jù),并按照某種方式顯示給用戶(hù)。Controller層的功能是捕捉用戶(hù)的一些事件,并根據(jù)用戶(hù)和應(yīng)用程序的狀態(tài)來(lái)決定響應(yīng)的類(lèi)型Controller層的響應(yīng)會(huì)同時(shí)影響到View層和Model層11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)MVC在JSP中的設(shè)計(jì)模式使用JSP技術(shù)來(lái)實(shí)現(xiàn)客戶(hù)頁(yè)面通過(guò)Servlet技術(shù)完成大量的事務(wù)處理工作以實(shí)現(xiàn)用戶(hù)的商業(yè)邏輯Servlet用于處理請(qǐng)求的事務(wù)充當(dāng)控制器(Controller即“C”)的角色負(fù)責(zé)響應(yīng)客戶(hù)對(duì)業(yè)務(wù)邏輯的請(qǐng)求并根據(jù)用戶(hù)的請(qǐng)求行為,決定將哪個(gè)JSP頁(yè)面發(fā)送給客戶(hù)JSP頁(yè)面處于表現(xiàn)層,也就是視圖(View即“V”)的角色JavaBean負(fù)責(zé)數(shù)據(jù)的處理,是模型(Model即“M”)的角色圖11-7描述了基于JSP的MVC設(shè)計(jì)模式11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)目前有兩種實(shí)現(xiàn)模型:基于Bean的MVC模型Bean可利用JavaBean實(shí)現(xiàn),也可利用EJB來(lái)實(shí)現(xiàn),分別構(gòu)成的系統(tǒng)是:JavaBean(M)+JSP(V)+Servlet(C);EJB(M)+JSP(V)+Servlet?實(shí)現(xiàn)。EJB屬于重量級(jí)的實(shí)體Bean,目前采用Spring+Hibernate框架構(gòu)造企業(yè)級(jí)的應(yīng)用Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架它對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝Java程序員可隨心所欲地使用對(duì)象編程思想來(lái)操縱數(shù)據(jù)庫(kù)Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合既可以在Java的客戶(hù)端程序中使用也可以在Servlet/JSP的Web應(yīng)用中使用Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)的持久化11.1.5常用開(kāi)發(fā)體系結(jié)構(gòu)基于Struts的MVC模型Struts是Apache組織的一個(gè)項(xiàng)目,像其他的Apache組織的項(xiàng)目一樣,它也是開(kāi)放源代碼的項(xiàng)目Struts是一個(gè)比較好的MVC框架提供了對(duì)開(kāi)發(fā)MVC系統(tǒng)的底層支持采用的主要技術(shù)是Servlet、JSP和customtaglibraryStruts是一組相互協(xié)作的類(lèi)、Servlet和JSP標(biāo)記,它們組成一個(gè)可重用的MVC設(shè)計(jì)這個(gè)定義表示Struts是一個(gè)框架,而不是一個(gè)庫(kù)Struts包含了豐富的標(biāo)記庫(kù)和獨(dú)立于該框架工作的實(shí)用程序類(lèi)目錄數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)11.1數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)11.2數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)實(shí)踐11.3如何訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)DBA:通過(guò)DBMS工具來(lái)訪(fǎng)問(wèn)如SQL

Server的企業(yè)管理器、查詢(xún)處理器最終用戶(hù):通過(guò)客戶(hù)端工具或應(yīng)用程序的GUI來(lái)訪(fǎng)問(wèn)如表單、報(bào)表等應(yīng)用程序員:通過(guò)API來(lái)訪(fǎng)問(wèn)在應(yīng)用程序中訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù):為了使不同的程序員能夠在各種應(yīng)用程序中訪(fǎng)問(wèn)不同的數(shù)據(jù)庫(kù)一組標(biāo)準(zhǔn)化的技術(shù)數(shù)據(jù)庫(kù)應(yīng)用程序的精髓:標(biāo)準(zhǔn)化的數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言:SQL通用的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù):ODBC、ADO……ODBCAPI和ODBC庫(kù)ODBC:OpenDataBaseConnectivity,開(kāi)放數(shù)據(jù)庫(kù)連接是Microsoft定義的一種數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)標(biāo)準(zhǔn),一個(gè)ODBC應(yīng)用程序可以訪(fǎng)問(wèn)在本地?cái)?shù)據(jù)庫(kù)上的數(shù)據(jù),也可以進(jìn)行擴(kuò)展,于訪(fǎng)問(wèn)多種異構(gòu)平臺(tái)上的數(shù)據(jù)庫(kù)。ODBC本質(zhì)上是一組數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的API。表面上看ODBC由一組函數(shù)組成,實(shí)質(zhì)上其核心是SQL。ODBCAPI的主要功能是將SQL語(yǔ)句發(fā)送到目標(biāo)數(shù)據(jù)庫(kù)中,然后對(duì)這些語(yǔ)句產(chǎn)生的結(jié)果進(jìn)行處理。ODBC庫(kù)是對(duì)ODBCAPI的封裝,如MFCODBC是在MicrosoftMFC中封裝了ODBCAPI的產(chǎn)物。ODBC體系結(jié)構(gòu)ODBC組件應(yīng)用程序不是直接調(diào)用ODBC驅(qū)動(dòng)程序,而是先調(diào)用ODBC驅(qū)動(dòng)程序管理器提供的API,而ODBC驅(qū)動(dòng)程序管理器再調(diào)用相應(yīng)的ODBC驅(qū)動(dòng)程序,這種間接的調(diào)用方式使得不管是連接到什么數(shù)據(jù)庫(kù)都可以按照一致的方式來(lái)調(diào)用。應(yīng)用程序通過(guò)專(zhuān)為DBMS編寫(xiě)的ODBC驅(qū)動(dòng)程序,而不是直接使用DBMS的工作方式,獨(dú)立于DBMS。驅(qū)動(dòng)程序?qū)⑦@些調(diào)用轉(zhuǎn)換成DBMS可使用的命令,因而簡(jiǎn)化了開(kāi)發(fā)人員的工作,使得廣泛的數(shù)據(jù)源都可以使用它。MFCDAODAO:DataAccessObject,數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象DAO提供一組分層對(duì)象,這些對(duì)象使用MicrosoftJet數(shù)據(jù)庫(kù)引擎訪(fǎng)問(wèn)下列對(duì)象中的數(shù)據(jù)和數(shù)據(jù)庫(kù)結(jié)構(gòu)MicrosoftJet(.MDB)數(shù)據(jù)庫(kù)ODBC數(shù)據(jù)源,使用ODBC驅(qū)動(dòng)程序可安裝的ISAM數(shù)據(jù)庫(kù)(如dBASE和Paradox)與ODBC一樣,DAO提供了一組API,而MFC也提供了一組DAO類(lèi),封裝了底層的API,從而簡(jiǎn)化了程序的開(kāi)發(fā)DAO應(yīng)用程序訪(fǎng)問(wèn)數(shù)據(jù)的原理DAO應(yīng)用程序訪(fǎng)問(wèn)數(shù)據(jù)的原理DAO和Jet數(shù)據(jù)庫(kù)引擎一起工作。如果該數(shù)據(jù)庫(kù)是一個(gè)本地的Access數(shù)據(jù)庫(kù)或者其他ISAM類(lèi)型的數(shù)據(jù)庫(kù),那么Jet引擎加載相應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。如果Jet正在使用遠(yuǎn)程數(shù)據(jù)庫(kù),那么該引擎加載ODBC驅(qū)動(dòng)程序管理器,利用ODBC調(diào)用來(lái)訪(fǎng)問(wèn)遠(yuǎn)程O(píng)DBC數(shù)據(jù)庫(kù)。ODBC的工作依賴(lài)于數(shù)據(jù)庫(kù)制造商提供的驅(qū)動(dòng)程序,而DAO直接利用MicrosoftJet引擎提供的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)對(duì)象集進(jìn)行工作,這使得DAO在訪(fǎng)問(wèn)Access、FoxPro、dBase、Paradox、Excel等數(shù)據(jù)庫(kù)時(shí)具有更好的性能。RDORDO:RemoteDataObjects,遠(yuǎn)程數(shù)據(jù)對(duì)象作為DAO的繼承者,RDO將數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象DAO提供的易編程性和ODBCAPI提供的高性能有效地結(jié)合在一起。DAO是一種位于MicrosoftJet引擎之上的對(duì)象層,而RDO封裝了ODBCAPI的對(duì)象層。RDO沒(méi)有Jet引擎的高開(kāi)銷(xiāo),再加上與ODBC的緊密關(guān)系,使得它訪(fǎng)問(wèn)ODBC兼容的數(shù)據(jù)庫(kù)(如SQLServer)時(shí)具有比DAO更高的性能。雖然RDO已被后來(lái)發(fā)展起來(lái)的ADO所取代,但是RDO與ODBC的密切關(guān)系使得RDO在某些情況下的性能比ADO更加突出。OLEDBOLEDB:ObjectLinkingandEmbedding,Database,對(duì)象鏈接嵌入數(shù)據(jù)庫(kù)是Microsoft開(kāi)發(fā)的一種高性能的、基于COM的數(shù)據(jù)庫(kù)技術(shù)。OLEDB和其他Microsoft數(shù)據(jù)庫(kù)技術(shù)的不同之處在于其提供通用數(shù)據(jù)訪(fǎng)問(wèn)的方式:其一是分布式查詢(xún)或統(tǒng)一訪(fǎng)問(wèn)多個(gè)(分布式)數(shù)據(jù)源功能;其二是能夠使非DBMS數(shù)據(jù)源可由數(shù)據(jù)庫(kù)應(yīng)用程序訪(fǎng)問(wèn)。OLEDB使用者和提供者使用OLEDB的應(yīng)用程序可以分為兩種:OLEDB提供者(OLEDBProvider)和OLEDB使用者(OLEDBConsumer)OLEDB提供者OLEDB使用者就是使用OLEDB接口的應(yīng)用程序。OLEDB提供者則負(fù)責(zé)訪(fǎng)問(wèn)數(shù)據(jù)源,并通過(guò)OLEDB接口向OLEDB使用者提供數(shù)據(jù)。與ODBC類(lèi)似,每一個(gè)不同的OLEDB數(shù)據(jù)源都是用自己相應(yīng)的OLEDB提供者。SQLServer2000中包含了以下OLEDB提供者:OLEDBProviderforSQLServerOLEDBProviderforODBCOLEDBProviderforJetOLEDBProviderforDTSPackagesOLEDBProviderforOracle通過(guò)OLEDB提供者訪(fǎng)問(wèn)不同的數(shù)據(jù)源ADOADO:ActiveXDataObjects技術(shù)ADO是基于OLEDB的訪(fǎng)問(wèn)接口,它繼承了OLEDB技術(shù)的優(yōu)點(diǎn),并且對(duì)OLEDB的接口做了封裝,定義了ADO對(duì)象,簡(jiǎn)化了程序的開(kāi)發(fā)。ADO是DAO/RDO的后繼產(chǎn)物,ADO2.0在功能上與RDO更相似,區(qū)別在于:ADO是OLEDB的COM包裝,允許使用任何數(shù)據(jù)源,不只是已索引的、連續(xù)的訪(fǎng)問(wèn)方法(ISAM)和基于SQL的數(shù)據(jù)庫(kù)RDO是ODBC的COM包裝。ODBC是一個(gè)基于C的API,允許通用用途(異類(lèi))的數(shù)據(jù)訪(fǎng)問(wèn)。但是,RDO依賴(lài)SQL作為命令語(yǔ)言來(lái)訪(fǎng)問(wèn)數(shù)據(jù)ADO.NETADO.NET是微軟在.NETFramework中負(fù)責(zé)數(shù)據(jù)訪(fǎng)問(wèn)的類(lèi)庫(kù)集,它是基于在COM時(shí)代奠基的OLEDB技術(shù)以及.NETFramework的類(lèi)庫(kù)和編程語(yǔ)言發(fā)展而來(lái)的,它可以讓.NET上的任何編程語(yǔ)言能夠連接并訪(fǎng)問(wèn)關(guān)系數(shù)據(jù)庫(kù)與非數(shù)據(jù)庫(kù)型數(shù)據(jù)來(lái)源(例如XML,Excel或是文本文檔數(shù)據(jù)),或是獨(dú)立出來(lái)作為處理應(yīng)用程序數(shù)據(jù)的類(lèi)對(duì)象。在ADO.NET中,可以使用兩個(gè)組件來(lái)訪(fǎng)問(wèn)和處理數(shù)據(jù):.NETFramework數(shù)據(jù)提供程序(.NETDataProvider)和DataSet。.NETFramework數(shù)據(jù)提供程序.NETFramework數(shù)據(jù)提供程序用于連接到數(shù)據(jù)庫(kù)、執(zhí)行命令和檢索結(jié)果。.NETFramework數(shù)據(jù)提供程序是專(zhuān)門(mén)為數(shù)據(jù)處理以及快速地只進(jìn)、只讀訪(fǎng)問(wèn)數(shù)據(jù)而設(shè)計(jì)的組件:Connection對(duì)象提供與數(shù)據(jù)源的連接。Command對(duì)象使得能夠訪(fǎng)問(wèn)用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲(chǔ)過(guò)程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫(kù)命令。DataReader從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流。DataAdapter提供連接DataSet對(duì)象和數(shù)據(jù)源的橋梁。DataAdapter使用Command對(duì)象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,并使得DataSet中的數(shù)據(jù)更改與數(shù)據(jù)源保持一致。ADO.NETDataSetADO.NETDataSet專(zhuān)門(mén)為獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪(fǎng)問(wèn)而設(shè)計(jì)。它可以用于多種不同的數(shù)據(jù)源,用于XML數(shù)據(jù),或用于管理應(yīng)用程序本地的數(shù)據(jù)。DataSet包含一個(gè)或多個(gè)DataTable對(duì)象的集合,這些對(duì)象由數(shù)據(jù)行和數(shù)據(jù)列以及有關(guān)DataTable對(duì)象中數(shù)據(jù)的主碼、外碼、約束和關(guān)系信息組成。ADO.NET結(jié)構(gòu)JDBCJDBC:Javadatabaseconnectivity,Java數(shù)據(jù)庫(kù)連接是Java語(yǔ)言中用來(lái)規(guī)范客戶(hù)端程序如何來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序接口,提供了諸如查詢(xún)和更新數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法JDBC與ODBC:ODBC不適合直接在Java中使用,因?yàn)樗褂肅語(yǔ)言接口JDBCAPI對(duì)于基本的SQL抽象和概念是一種自然的Java接口。它建立在ODBC上而不是從零開(kāi)始JDBC以Java風(fēng)格與優(yōu)點(diǎn)為基礎(chǔ)并進(jìn)行優(yōu)化,因此更加易于使用Java程序連接數(shù)據(jù)庫(kù)的方法JDBC驅(qū)動(dòng)程序的類(lèi)型:JDBC-ODBC橋加ODBC驅(qū)動(dòng)程序:利用ODBC驅(qū)動(dòng)程序提供JDBC訪(fǎng)問(wèn)本地API:這種類(lèi)型的驅(qū)動(dòng)通過(guò)客戶(hù)端加載數(shù)據(jù)庫(kù)廠(chǎng)商提供的本地代碼庫(kù)(C/C++等)來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)JDBC網(wǎng)絡(luò)的純Java驅(qū)動(dòng)程序:這種驅(qū)動(dòng)程序?qū)DBC轉(zhuǎn)換為與DBMS無(wú)關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個(gè)服務(wù)器轉(zhuǎn)換為一種DBMS協(xié)議本地協(xié)議純Java驅(qū)動(dòng)程序:這種類(lèi)型的驅(qū)動(dòng)程序?qū)DBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議第(3)、(4)類(lèi)驅(qū)動(dòng)程序?qū)⒊蔀閺腏DBC訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的首選方法。數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)小結(jié)(1)ODBC:第一個(gè)使用SQL訪(fǎng)問(wèn)不同關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)DAO和RDO:ODBC使用低層接口,使用ODBC比較麻煩。

DAO是建立在MicrosoftJet基礎(chǔ)之上的,使用DAO是最快速、最有效地連接Access數(shù)據(jù)庫(kù)的方法。DAO也可以連接到非Access數(shù)據(jù)庫(kù),但是需要Jet引擎解釋DAO和ODBC之間的調(diào)用,這導(dǎo)致了較慢的連接速度和額外的開(kāi)銷(xiāo)RDO為ODBC提供了一個(gè)COM的封裝RDO的目的是簡(jiǎn)化ODBC的開(kāi)發(fā)和在VisualBasic和VBA程序中使用ODBC數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)小結(jié)(2)OLEDB:OLEDB建立于ODBC之上,并將此技術(shù)擴(kuò)展為提供更高級(jí)數(shù)據(jù)訪(fǎng)問(wèn)接口的組件結(jié)構(gòu)OLEDB是一個(gè)針對(duì)SQL數(shù)據(jù)源和非SQL數(shù)據(jù)源(例如郵件和目錄)進(jìn)行操作的APIADO類(lèi)似于ODBC,OLEDB也是屬于低層接口,這為OLEDB的使用帶來(lái)了障礙ADO是OLEDB的COM包裝ADO主要為連接的數(shù)據(jù)訪(fǎng)問(wèn)而設(shè)計(jì),這意味著不論是瀏覽或更新數(shù)據(jù)都必須是實(shí)時(shí)的,這種連接的訪(fǎng)問(wèn)模式占用服務(wù)器端的重要資源數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)小結(jié)(3)ADO.NET:ADO.NET滿(mǎn)足了ADO無(wú)法滿(mǎn)足的三個(gè)重要需求:提供了離線(xiàn)的數(shù)據(jù)訪(fǎng)問(wèn)模型,這對(duì)Web環(huán)境至關(guān)重要;提供了與XML的緊密集成;還提供了與.NETFramework的無(wú)縫集成JDBC:JDBC是一種用于執(zhí)行SQL語(yǔ)句的JavaAPI,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一的訪(fǎng)問(wèn)接口JDO:提供了透明的對(duì)象存儲(chǔ),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBCAPI的使用)JDO提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫(kù)、文件、XML及對(duì)象數(shù)據(jù)庫(kù)等,使得應(yīng)用可移植性更強(qiáng)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)小結(jié)(4)數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)的發(fā)展呈現(xiàn)出以下態(tài)勢(shì):高級(jí)化:即對(duì)象模型越來(lái)越簡(jiǎn)單,調(diào)用越來(lái)越容易,調(diào)用方法一般與底層無(wú)關(guān);通用化:即能夠以一種統(tǒng)一的方式訪(fǎng)問(wèn)各種異構(gòu)數(shù)據(jù)源,如關(guān)系數(shù)據(jù)庫(kù)、XML數(shù)據(jù)、文本等;高效化:得益于各種優(yōu)化技術(shù),現(xiàn)在的數(shù)據(jù)訪(fǎng)問(wèn)技術(shù)能夠針對(duì)各種數(shù)據(jù)源采用最合適的訪(fǎng)問(wèn)技術(shù)。同時(shí),離線(xiàn)的數(shù)據(jù)訪(fǎng)問(wèn)模式大大降低了與服務(wù)器的交互,也減輕了服務(wù)器的負(fù)擔(dān),提高了整體性能。數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)的選擇:在.NET環(huán)境下開(kāi)發(fā)應(yīng)用應(yīng)該首選ADO.NET在Windows平臺(tái)非.NET環(huán)境下開(kāi)發(fā)應(yīng)用一般都可以使用ADO目錄數(shù)據(jù)庫(kù)系統(tǒng)的體系結(jié)構(gòu)11.1數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)11.2數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)實(shí)踐11.3ADO編程對(duì)象模型ADO提供類(lèi)和對(duì)象以完成以下活動(dòng):

連接到數(shù)據(jù)源(Connection),并可選擇開(kāi)始一個(gè)事務(wù);可選擇創(chuàng)建對(duì)象來(lái)表示SQL命令(Command);可選擇在SQL命令中指定列、表和值作為變量參數(shù)(Parameter);執(zhí)行命令(Command、Connection或Recordset);如果命令按行返回,則將行存儲(chǔ)在緩存中(Recordset);可選擇創(chuàng)建緩存視圖,以便能對(duì)數(shù)據(jù)進(jìn)行排序、篩選和定位(Recordset);通過(guò)添加、刪除或更改行和列編輯數(shù)據(jù)(Recordset);在適當(dāng)情況下,使用緩存中的更改內(nèi)容來(lái)更新數(shù)據(jù)源(Recordset);如果使用了事務(wù),則可以接受或拒絕在完成事務(wù)期間所作的更改并結(jié)束事務(wù)(Connection)ADO對(duì)象模型中的對(duì)象及其說(shuō)明對(duì)象說(shuō)明Connection代表打開(kāi)的、與數(shù)據(jù)源的連接CommandCommand對(duì)象定義了將對(duì)數(shù)據(jù)源執(zhí)行的指定命令Parameter代表與基于參數(shù)化查詢(xún)或存儲(chǔ)過(guò)程的Command對(duì)象相關(guān)聯(lián)的參數(shù)或自變量Recordset代表來(lái)自基本表或命令執(zhí)行結(jié)果的記錄的集合。任何時(shí)候,Recordset

對(duì)象所指的當(dāng)前記錄均為集合內(nèi)的單個(gè)記錄Field代表使用普通數(shù)據(jù)類(lèi)型的數(shù)據(jù)的列Error包含與單個(gè)操作(涉及提供者)有關(guān)的數(shù)據(jù)訪(fǎng)問(wèn)錯(cuò)誤的詳細(xì)信息Property代表由提供者定義的ADO對(duì)象的動(dòng)態(tài)特性ADO數(shù)據(jù)集合及其說(shuō)明

集合說(shuō)明Errors包含為響應(yīng)涉及提供者的單個(gè)錯(cuò)誤而創(chuàng)建的所有Error對(duì)象。Fields包含Recordset對(duì)象的所有Field對(duì)象。Parameters包含Command對(duì)象的所有Parameter對(duì)象。Properties包含指定對(duì)象實(shí)例的所有Property對(duì)象。ADO對(duì)象和數(shù)據(jù)集合之間的關(guān)系Connection對(duì)象Connection對(duì)象代表打開(kāi)的、與數(shù)據(jù)源的連接用Connection對(duì)象的可執(zhí)行下列操作:

在打開(kāi)連接前使用ConnectionString、ConnectionTimeout和Mode屬性對(duì)連接進(jìn)行配置設(shè)置CursorLocation屬性以便調(diào)用支持批更新的“客戶(hù)端游標(biāo)提供者”使用DefaultDatabase屬性設(shè)置連接的默認(rèn)數(shù)據(jù)庫(kù)使用IsolationLevel屬性為在連接上打開(kāi)的事務(wù)設(shè)置隔離級(jí)別使用Provider屬性指定OLEDB提供者使用Open方法建立到數(shù)據(jù)源的物理連接,使用Close方法將其斷開(kāi)使用Execute方法執(zhí)行連接的命令,并使用CommandTimeout屬性對(duì)執(zhí)行進(jìn)行配置使用BeginTrans、CommitTrans和RollbackTrans方法以及Attributes屬性管理打開(kāi)的連接上的事務(wù)(如果提供者支持則包括嵌套的事務(wù))使用Errors集合檢查數(shù)據(jù)源返回的錯(cuò)誤通過(guò)Version屬性讀取使用中的ADO執(zhí)行版本使用OpenSchema方法獲取數(shù)據(jù)庫(kù)模式信息Command對(duì)象Command對(duì)象定義了將對(duì)數(shù)據(jù)源執(zhí)行的指定命令使用Command對(duì)象可進(jìn)行下列操作:使用CommandText屬性定義命令(如SQL語(yǔ)句)的可執(zhí)行文本通過(guò)Parameter對(duì)象和Parameters集合定義參數(shù)化查詢(xún)或存儲(chǔ)過(guò)程參數(shù)使用Execute方法執(zhí)行命令并在適當(dāng)?shù)臅r(shí)候返回Recordset對(duì)象執(zhí)行前應(yīng)使用CommandType屬性指定命令類(lèi)型以?xún)?yōu)化性能使用Prepared屬性決定提供者是否在執(zhí)行前保存準(zhǔn)備好(或編譯好)的命令版本使用CommandTimeout屬性設(shè)置提供者等待命令執(zhí)行的秒數(shù)通過(guò)設(shè)置ActiveConnection屬性使打開(kāi)的連接與Command對(duì)象關(guān)聯(lián)設(shè)置Name屬性將Command標(biāo)識(shí)為與Connection對(duì)象關(guān)聯(lián)的方法將Command對(duì)象傳送給Recordset的Source屬性以便獲取數(shù)據(jù)Parameter對(duì)象Parameter對(duì)象代表與基于參數(shù)化查詢(xún)或存儲(chǔ)過(guò)程的Command對(duì)象相關(guān)聯(lián)的參數(shù)或自變量使用Parameter對(duì)象可進(jìn)行如下操作:使用Name屬性可設(shè)置或返回參數(shù)名稱(chēng);使用Value屬性可設(shè)置或返回參數(shù)值;使用Attributes和Direction、Precision、NumericScale、Size以及Type屬性可設(shè)置或返回參數(shù)特性;使用AppendChunk方法可將長(zhǎng)整型二進(jìn)制或字符數(shù)據(jù)傳遞給參數(shù)Recordset對(duì)象Recordset對(duì)象表示來(lái)自基本表或命令執(zhí)行結(jié)果的記錄集合。任何時(shí)候,Recordset對(duì)象所指的當(dāng)前記錄均為集合內(nèi)的單個(gè)記錄。使用ADO時(shí),通過(guò)Recordset對(duì)象可對(duì)幾乎所有數(shù)據(jù)進(jìn)行操作。所有Recordset對(duì)象均使用記錄(行)和字段(列)進(jìn)行構(gòu)造??梢詣?chuàng)建所需數(shù)量的Recordset對(duì)象。打開(kāi)Recordset時(shí),當(dāng)前記錄位于第一個(gè)記錄(如果有),并且BOF和EOF屬性被設(shè)置為False。如果沒(méi)有記錄,BOF和EOF屬性設(shè)置是True。Recordset對(duì)象可以使用MoveFirst、MoveLast、MoveNext、MovePrevious和Move方法,以及AbsolutePosition、AbsolutePage和Filter屬性來(lái)重新確定當(dāng)前記錄的位置Recordset對(duì)象可支持兩類(lèi)更新:使用立即更新,一旦調(diào)用Update方法,對(duì)數(shù)據(jù)的所有更改將被立即寫(xiě)入基本數(shù)據(jù)源。也可以使用AddNew和Update方法將值的數(shù)組作為參數(shù)傳遞,同時(shí)更新記錄的若干字段。如果提供者支持批更新,可以使提供者將多個(gè)記錄的更改存入緩存,然后使用UpdateBatch方法在單個(gè)調(diào)用中將它們傳送給數(shù)據(jù)庫(kù)。Field對(duì)象Field對(duì)象代表使用普通數(shù)據(jù)類(lèi)型的數(shù)據(jù)的列使用Field對(duì)象可進(jìn)行如下操作:使用Name屬性可返回字段名;使用Value屬性可查看或更改字段中的數(shù)據(jù);使用Type、Precision和NumericScale屬性可返回字段的基本特性;使用DefinedSize屬性可返回已聲明的字段大??;使用ActualSize屬性可返回給定字段中數(shù)據(jù)的實(shí)際大?。皇褂肁ttributes屬性和Properties集合可決定對(duì)于給定字段哪些類(lèi)型的功能受到支持;使用AppendChunk和GetChunk方法可處理包含長(zhǎng)二進(jìn)制或長(zhǎng)字符數(shù)據(jù)的字段值;如果提供者支持批更新,可使用OriginalValue和UnderlyingValue屬性在批更新期間解決字段值之間的差異。Error對(duì)象Error對(duì)象包含與單個(gè)操作有關(guān)的數(shù)據(jù)訪(fǎng)問(wèn)錯(cuò)誤的詳細(xì)信通過(guò)Error對(duì)象可獲得每個(gè)錯(cuò)誤的詳細(xì)信息,包括:Description屬性,包含錯(cuò)誤的文本;Number屬性,包含錯(cuò)誤常量的長(zhǎng)整型整數(shù)值;Source屬性,標(biāo)識(shí)產(chǎn)生錯(cuò)誤的對(duì)象。在向數(shù)據(jù)源發(fā)出請(qǐng)求之后,如果Errors集合中有多個(gè)Error對(duì)象,則將會(huì)用到該屬性;SQLState和NativeError屬性,提供來(lái)自SQL數(shù)據(jù)源的信息。Property對(duì)象Property對(duì)象代表由提供者定義的ADO對(duì)象的動(dòng)態(tài)特征。ADO對(duì)象有兩種類(lèi)型的屬性:內(nèi)置屬性和動(dòng)態(tài)屬性?xún)?nèi)置屬性是在ADO中實(shí)現(xiàn)并立即可用于任何新對(duì)象的屬性,此時(shí)使用MyObject.Property語(yǔ)法。它們不會(huì)作為Property對(duì)象出現(xiàn)在對(duì)象的Properties集合中,因此,雖然可以更改它們的值,但無(wú)法更改它們的特性動(dòng)態(tài)屬性由基本的數(shù)據(jù)提供者定義,并出現(xiàn)在相應(yīng)的ADO對(duì)象的Properties集合中基于VC的數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)在VisualC++中使用ADO有3種不同的方法:直接使用ADOData控件;使用智能指針操作;使用VisualC++ExtensionsforADO

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論