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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

對象所指的當前記錄均為集合內的單個記錄Field代表使用普通數(shù)據(jù)類型的數(shù)據(jù)的列Error包含與單個操作(涉及提供者)有關的數(shù)據(jù)訪問錯誤的詳細信息Property代表由提供者定義的ADO對象的動態(tài)特性ADO數(shù)據(jù)集合及其說明

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

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

溫馨提示

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

評論

0/150

提交評論