《數(shù)據(jù)庫訪問接口》PPT課件_第1頁
《數(shù)據(jù)庫訪問接口》PPT課件_第2頁
《數(shù)據(jù)庫訪問接口》PPT課件_第3頁
《數(shù)據(jù)庫訪問接口》PPT課件_第4頁
《數(shù)據(jù)庫訪問接口》PPT課件_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五章數(shù)據(jù)庫訪問接口,第五章數(shù)據(jù)庫訪問接口,5.1概述5.2ODBC與DAO對象5.3JDBC原理與應(yīng)用5.4OLEDB和ADO5.5數(shù)據(jù)庫中間件,5.1概述,DBMS是非常復(fù)雜的軟件,編寫程序通過某種數(shù)據(jù)庫專用接口與其通信是非常復(fù)雜的工作,為此,產(chǎn)生了數(shù)據(jù)庫的客戶訪問技術(shù),即數(shù)據(jù)庫訪問技術(shù)。開放的數(shù)據(jù)庫訪問接口為數(shù)據(jù)庫應(yīng)用程序開發(fā)人員訪問與不同的、異構(gòu)的數(shù)據(jù)庫提供了統(tǒng)一的訪問方式,采用這種數(shù)據(jù)庫接口可以通過編寫一段代碼實(shí)現(xiàn)對多種類型數(shù)據(jù)庫的復(fù)雜操作。實(shí)現(xiàn)了開放數(shù)據(jù)庫的互聯(lián),并大大減小了編程的工作量和開發(fā)時(shí)間。,目前流行的開放數(shù)據(jù)庫訪問接口有:ODBCJDBCOLEDB數(shù)據(jù)庫網(wǎng)關(guān)(SQL網(wǎng)關(guān))。,(1)ODBC,ODBC是Microsoft公司推出的開放數(shù)據(jù)庫接口標(biāo)準(zhǔn)。ODBC為應(yīng)用程序和驅(qū)動模塊提供了一個(gè)定義良好的、不依賴于數(shù)據(jù)庫的應(yīng)用程序接口(API)。并且保持了與SQL標(biāo)準(zhǔn)的一致性。使用API時(shí),ODBC通過一個(gè)驅(qū)動管理器來判定應(yīng)用程序要連接的數(shù)據(jù)庫的類型,并載入(或卸載)對應(yīng)的ODBC驅(qū)動。這樣,就實(shí)現(xiàn)了應(yīng)用程序和數(shù)據(jù)庫之間的相互獨(dú)立,簡化了從Windows操作系統(tǒng)(以及其他一些操作系統(tǒng))到數(shù)據(jù)庫的訪問。目前,越來越多的第三方廠商在設(shè)計(jì)應(yīng)用開發(fā)集成環(huán)境時(shí),積極采用ODBC技術(shù),使應(yīng)用開發(fā)工具可通過ODBC實(shí)現(xiàn)對異構(gòu)數(shù)據(jù)庫的快捷和方便的訪問。,(2)JDBC,JDBC(JavaDatabaseConnectivity)是JavaSoft提供的第一個(gè)支持lava語言的數(shù)據(jù)庫API它支持基本SQL功能,在不同的數(shù)據(jù)庫功能模塊的層次上為Java開發(fā)人員提供了一個(gè)支持Java開發(fā)或支持Java應(yīng)用程序運(yùn)行的環(huán)境訪問各種數(shù)據(jù)庫的統(tǒng)一的用戶界面,同時(shí)還提供了多樣化的數(shù)據(jù)連接方式。JDBC主要由兩層組成:JDBC應(yīng)用程序接口(JDBCAPI)和JDBC驅(qū)動應(yīng)用程序接口。JDBCAPI提供從應(yīng)用程序到JDBC管理器的通訊,開發(fā)者通過API使用標(biāo)準(zhǔn)Java機(jī)制訪問數(shù)據(jù)庫。數(shù)據(jù)庫供應(yīng)商提供JDBC驅(qū)動接口,也可以通過JDBC-ODBC連接橋使用傳統(tǒng)的0DBC連接:,(3)OLEDB,OLEDB定義了一個(gè)訪問服務(wù)器的集合,通過這些服務(wù)器可以很容易地連接到任意數(shù)目的數(shù)據(jù)源。這樣,開發(fā)者就可以把多種不同的數(shù)據(jù)源作為單一的虛擬數(shù)據(jù)庫來管理。OLEDB允許使用標(biāo)準(zhǔn)的COM接口訪問數(shù)據(jù)。OLEDB為開發(fā)者提供訪問關(guān)系數(shù)據(jù)庫、文件、擴(kuò)展表、電子郵件等數(shù)據(jù)的方法。通過COM接口,開發(fā)者可以使用OLEDB方便地集成面向?qū)ο蟮臄?shù)據(jù)庫和多維數(shù)據(jù)庫。核心思想是生成獨(dú)立的OLEDB組件對象,用以調(diào)度數(shù)據(jù)提供者的各種附加特性和功能。這些獨(dú)立的OLEDB組件叫做“服務(wù)提供者”,允許應(yīng)用程序使用它們實(shí)現(xiàn)不同數(shù)據(jù)聯(lián)合(同構(gòu)的或異構(gòu)的)之間的互聯(lián)。數(shù)據(jù)以單一的視圖的形式存在,而不管它們的數(shù)據(jù)模型是關(guān)系型的、面向?qū)ο蟮?,還是多維的。,(4)數(shù)據(jù)庫網(wǎng)關(guān),數(shù)據(jù)庫網(wǎng)關(guān)也叫SQL網(wǎng)關(guān),是一種應(yīng)用程序接口(API),通過使用同一接口提供對運(yùn)行在多種平臺上的不同數(shù)據(jù)庫的訪問。它們類似于實(shí)際的數(shù)據(jù)庫中間件產(chǎn)品,為開發(fā)者提供訪問任意數(shù)目數(shù)據(jù)庫的接口。數(shù)據(jù)庫網(wǎng)關(guān)把SQL調(diào)用解釋成為標(biāo)準(zhǔn)PAP(FormatandProtocol)格式。PAP格式實(shí)現(xiàn)通用的客戶機(jī)和服務(wù)器連接,也就是異構(gòu)數(shù)據(jù)庫和運(yùn)行平臺的通用連結(jié)。數(shù)據(jù)庫網(wǎng)關(guān)可以把API調(diào)用直接翻譯成PAP,把請求傳遞到目標(biāo)數(shù)據(jù)庫并翻譯,以便目標(biāo)數(shù)據(jù)庫和平臺做出響應(yīng)。,第五章數(shù)據(jù)庫訪問接口,5.1概述5.2ODBC與DAO對象5.3JDBC原理與應(yīng)用5.4OLEDB和ADO5.5數(shù)據(jù)庫中間件,5.2ODBC與DAO對象,5.2.1ODBC和DAO概述5.2.2ODBC的使用5.2.3DAO的使用,5.2.1ODBC和DAO概述,(1)ODBC概述ODBC是80年代末90年代初出現(xiàn)的技術(shù),它為編寫關(guān)系數(shù)據(jù)庫的客戶軟件提供了統(tǒng)一的接口。ODBC提供統(tǒng)一的API,可用于處理不同數(shù)據(jù)庫的客戶應(yīng)用程序。使用ODBCAPI的應(yīng)用程序可以與任何具有ODBC驅(qū)動程序的關(guān)系數(shù)據(jù)庫進(jìn)行通信。由于ODBC為關(guān)系數(shù)據(jù)庫提供了統(tǒng)一的接口,現(xiàn)在已經(jīng)被廣泛應(yīng)用,并逐漸成為關(guān)系數(shù)據(jù)庫接口的標(biāo)準(zhǔn)。,它建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)。這些API利用SQL來完成其大部分任務(wù)。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。ODBC的最大優(yōu)點(diǎn)是能以統(tǒng)一的方式處理所有的關(guān)系數(shù)據(jù)庫。但是,ODBC僅限于關(guān)系數(shù)據(jù)庫,由于ODBC的關(guān)系型特性,很難使用ODBC與非關(guān)系數(shù)據(jù)源進(jìn)行通信,例如對象數(shù)據(jù)庫、網(wǎng)絡(luò)目錄服務(wù)、電子郵件存儲等。,(2)DAO概述DAO(DatabaseAccessObject,數(shù)據(jù)訪問對象)屬于數(shù)據(jù)訪問客戶端。是第一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫訪問接口。DAO是Microsoft一種用來訪問Jet引擎的方法,主要適用于單系統(tǒng)應(yīng)用程序或在小范圍本地分布中實(shí)現(xiàn)對桌面數(shù)據(jù)庫(如Access、FoxPro、dBase等)的訪問。使用DA0的程序編碼非常簡單。它提供了完成關(guān)系數(shù)據(jù)庫系統(tǒng)管理所需的全部操作的屬性和方法:包括創(chuàng)建數(shù)據(jù)庫,定義表、字段和索引,以及建立表間的關(guān)系,定位和查詢數(shù)據(jù)庫等工具。,Jet(JointEngineTechnology,數(shù)據(jù)連接引擎技術(shù))是一種基于工作站,通過DA0訪問數(shù)據(jù)庫的機(jī)制。Jet機(jī)制有自己的查詢和結(jié)果集處理功能,并可對同構(gòu)或異構(gòu)數(shù)據(jù)源作查詢處理。Jet技術(shù)目前已經(jīng)達(dá)到了4.0版本,它是DA0,Access,VB等Windows應(yīng)用進(jìn)行數(shù)據(jù)庫訪問的基礎(chǔ)。引擎本身的數(shù)據(jù)庫格式為MDB,也支持對目前流行的絕大多數(shù)數(shù)據(jù)庫格式的訪問,當(dāng)然MDB是數(shù)據(jù)庫引擎中效率最高的數(shù)據(jù)庫。,(3)ODBC與DA0的區(qū)別ODBC和DA0的區(qū)別在于它們訪問數(shù)據(jù)庫的機(jī)制不同。0DBC的工作依賴于數(shù)據(jù)庫制造商提供的驅(qū)動程序,使用ODBCAPI的時(shí)候,Windous的ODBC管理程序把數(shù)據(jù)庫訪問的請求傳遞給正確的驅(qū)動程序,驅(qū)動程序再使用SQL語句指示DBMS完成數(shù)據(jù)庫訪問工作。而DA0則可以繞開了中間環(huán)節(jié),直接使用Microsoft提供的數(shù)據(jù)庫連接性引擎技術(shù)(Jet)對數(shù)據(jù)庫訪問對象集進(jìn)行工作,速度比0DBC快。ODBC是一種通用數(shù)據(jù)訪問模型,而DAO更多的是作為一種數(shù)據(jù)訪問客戶端。一般來說DA0是本機(jī)Access數(shù)據(jù)庫數(shù)據(jù)源首選的訪問接口,但在客戶/服務(wù)器體系結(jié)構(gòu)上不如ODBC功能強(qiáng)大。,5.2.2ODBC的使用,1.ODBC的組成和結(jié)構(gòu)2.ODBC的基本工作流程3.使用ODBCMFC類4.ODBC數(shù)據(jù)源的管理,1.ODBC的組成和結(jié)構(gòu),一個(gè)完整的ODBC由四個(gè)部分組成:應(yīng)用程序接口、驅(qū)動程序管理器、數(shù)據(jù)庫驅(qū)動程序和數(shù)據(jù)源。,ODBC組件圖,(1)應(yīng)用程序接口負(fù)責(zé)處理并調(diào)用ODBC函數(shù)、發(fā)送對數(shù)據(jù)庫的SQL請求及取得結(jié)果。它并不直接與數(shù)據(jù)庫打交道,因此,屏蔽了不同ODBC數(shù)據(jù)庫驅(qū)動器之間函數(shù)調(diào)用的差異,屏蔽了底層數(shù)據(jù)庫系統(tǒng)的不同。為用戶提供統(tǒng)一的SQL編程接口和調(diào)用級界面,方便訪問來自多種DBMS的數(shù)據(jù)。(2)驅(qū)動程序管理器驅(qū)動程序管理器是一個(gè)帶有輸入程序的動態(tài)鏈接庫(DLL),主要目的是為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動程序處理0DBC調(diào)用的初始化調(diào)用,提供0DBC調(diào)用的參數(shù)有效性和序列有效性。,(3)數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序是一個(gè)完成ODBC函數(shù)調(diào)用并與數(shù)據(jù)之間相互影響的DLL。如,當(dāng)應(yīng)用程序調(diào)用SQLBrowseConnect(),SQLConnect()或SQLDriverConnect()函數(shù)時(shí),驅(qū)動程序管理器裝入驅(qū)動程序。如果需要,數(shù)據(jù)庫驅(qū)動程序?qū)薷膽?yīng)用程序的請求,使得請求符合相關(guān)的DBMS所支持的文法。所以,ODBC驅(qū)動管理器的目的是加載數(shù)據(jù)庫驅(qū)動器,便于ODBC函數(shù)調(diào)用。(4)數(shù)據(jù)源數(shù)據(jù)源由用戶想要存取的數(shù)據(jù)以及與它相關(guān)的操作系統(tǒng)、DBMS和用于訪問DBMS的網(wǎng)絡(luò)平臺組成。數(shù)據(jù)源負(fù)責(zé)為應(yīng)用程序存儲和管理數(shù)據(jù)。它包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,實(shí)際上是一種數(shù)據(jù)連接的抽象。,ODBC實(shí)際上是一種相當(dāng)?shù)讓拥脑L問技術(shù),因此它可以從底層設(shè)置和控制數(shù)據(jù)庫,完成一些高級數(shù)據(jù)庫技術(shù)無法完成的功能。,2.ODBC的基本工作流程,當(dāng)應(yīng)用程序要訪問一個(gè)數(shù)據(jù)庫時(shí):首先必須注冊一個(gè)數(shù)據(jù)源,ODBC管理器根據(jù)數(shù)據(jù)源提供的信息建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。這樣,應(yīng)用程序只需要將數(shù)據(jù)源名提供給ODBC,就能建立起與相應(yīng)數(shù)據(jù)庫的連接。ODBCAPI不能直接訪問數(shù)據(jù)庫。驅(qū)動程序管理器負(fù)責(zé)將應(yīng)用程序?qū)DBCAPI的調(diào)用傳遞給正確的驅(qū)動程序。而驅(qū)動程序在執(zhí)行完相應(yīng)的操作之后,將結(jié)果通過驅(qū)動程序管理器返回給應(yīng)用程序。在訪問ODBC數(shù)據(jù)源時(shí),需要ODBC驅(qū)動程序的支持。,一個(gè)ODBC應(yīng)用的建立應(yīng)涵蓋以下主要內(nèi)容:建立需要操作數(shù)據(jù)庫的應(yīng)用程序,該程序通過調(diào)用ODBC函數(shù)提交SQL語句提供運(yùn)行環(huán)境,該環(huán)境應(yīng)包含數(shù)據(jù)庫驅(qū)動程序,它負(fù)責(zé)處理ODBC函數(shù)調(diào)用,向數(shù)據(jù)源提交SQL請求,向應(yīng)用程序返回結(jié)果,必要時(shí)將SQL語法翻譯成符合DBMS語法規(guī)定的格式具有由用戶數(shù)據(jù)庫、DBMS等構(gòu)成的可供應(yīng)用程序訪問的數(shù)據(jù)源,具體來說,通過ODBC訪問數(shù)據(jù)庫的基本步驟如下:創(chuàng)立并配置數(shù)據(jù)源;建立一個(gè)與數(shù)據(jù)源的對話連接;向數(shù)據(jù)源發(fā)出SQL請求;定義一個(gè)緩沖區(qū)和數(shù)據(jù)格式用于存儲訪問結(jié)果;提取結(jié)果;處理各種錯(cuò)誤;向用戶報(bào)告結(jié)果;關(guān)閉與數(shù)據(jù)源的連接,MicrosoftDeveloperStudio為大多數(shù)標(biāo)準(zhǔn)的數(shù)據(jù)庫格式提供了32位ODBC驅(qū)動器。這些標(biāo)準(zhǔn)數(shù)據(jù)格式包括有:SQLServer,Access,Paradox,dBase,F(xiàn)oxPro,Excel,Oracle以及MicrosoftText。ODBCAPI是一個(gè)內(nèi)容豐富的數(shù)據(jù)庫編程接口,包括60多個(gè)函數(shù)、SQL數(shù)據(jù)類型以及常量的聲明。ODBCAPI獨(dú)立于DBMS和操作系統(tǒng)的,而且它與編程語言無關(guān)。不過直接使用ODBCAPI比較麻煩,所以微軟后來又發(fā)展出來DAO、更容易開發(fā)程序。,3.使用ODBCMFC類,ODBC為關(guān)系數(shù)據(jù)庫提供了統(tǒng)一的接口,但是ODBCAPI十分復(fù)雜。在VisualC+中,MFC(MicrosoftFoundationClasse微軟基礎(chǔ)類庫)提供了一些類,對ODBCAPI進(jìn)行封裝,為ODBC編程提供了一個(gè)面向?qū)ο蟮姆椒?ODBC編程的復(fù)雜度大大降低。MFCODBC類在使用上比ODBCAPI容易,但是損失了ODBCAPI對低層的靈活控制,因此,MFCODBC類屬于高級數(shù)據(jù)庫接口。,同ODBCAPI編程類似,MFC的ODBC編程也要先建立同ODBC數(shù)據(jù)源的連接,這個(gè)過程由一個(gè)CDatabase對象的Open函數(shù)實(shí)現(xiàn)。然后CDatabase對象的指針將被傳遞到CRecordSet對象的構(gòu)造函數(shù)里,使CRecordSet對象與當(dāng)前建立起來的數(shù)據(jù)源連接結(jié)合起來。完成數(shù)據(jù)源連接之后,大量的數(shù)據(jù)庫編程操作將集中在記錄集的操作上。CRecordSet類的豐富的成員函數(shù)可以讓開發(fā)人員輕松地完成基本的數(shù)據(jù)庫應(yīng)用程序開發(fā)任務(wù)。當(dāng)然,完成了所有的操作之后,在應(yīng)用程序退出運(yùn)行狀態(tài)的時(shí)候,需要將所有的記錄集關(guān)閉,并關(guān)閉所有同數(shù)據(jù)源的連接。,MFC對ODBC的封裝主要是開發(fā)了CDatabase類和CRecordSet類。使用CDatabase:OpenEx通過驅(qū)動程序建立一個(gè)數(shù)據(jù)源的連接使用CDatabase:Close關(guān)閉與數(shù)據(jù)源的連接使用CRecordSet:Open()和Requery()成員函數(shù)可以實(shí)現(xiàn)記錄查詢,CDatabase類的成員,CRecordset的類成員,4.ODBC數(shù)據(jù)源的管理,在0DBC中,應(yīng)用程序不能直接存取數(shù)據(jù)庫,它必須通過管理器和數(shù)據(jù)庫交換信息。0DBC管理器負(fù)責(zé)安裝驅(qū)動程序,將應(yīng)用程序的SQL語句及其他信息傳遺給驅(qū)動程序,并幫助程序員跟蹤0DBC的函數(shù)調(diào)用,而驅(qū)動程序則負(fù)責(zé)將運(yùn)行結(jié)果送回應(yīng)用程序。數(shù)據(jù)源負(fù)責(zé)將運(yùn)行結(jié)果送回應(yīng)用程序。數(shù)據(jù)源在使用之前必須進(jìn)行創(chuàng)建和配置。完成這些步驟后,應(yīng)用程序就能夠通過數(shù)據(jù)源直接操縱數(shù)據(jù)庫。用戶可通過如下兩種方式創(chuàng)建或配置數(shù)據(jù)源:系統(tǒng)函數(shù)調(diào)用ODBC數(shù)據(jù)源管理程序,下面首先介紹0DBC管理器中各個(gè)頁面的用途:用戶DSN。0DBC用戶數(shù)據(jù)源存儲了如何與指定數(shù)據(jù)庫提供者連接的信息,用戶數(shù)據(jù)源只對當(dāng)前用戶可見,且只能用于當(dāng)前機(jī)器。這里的當(dāng)前機(jī)器是指這個(gè)配置只對當(dāng)前的機(jī)器有效,而不是指只能配置本機(jī)上的數(shù)據(jù)庫。它可以配置局域網(wǎng)中另一臺機(jī)器上的數(shù)據(jù)庫。系統(tǒng)DSN。0DBC系統(tǒng)數(shù)據(jù)源存儲了如何指定數(shù)據(jù)庫提供者連接的信息。系統(tǒng)數(shù)據(jù)源對當(dāng)前機(jī)器上的所有用戶都是可見的,包括NT服務(wù)。也就是說在這里配置的數(shù)據(jù)源,只要是這臺機(jī)器的用戶都可以訪問。文件DSN。0DBC文件數(shù)據(jù)源允許用戶連接數(shù)據(jù)提供者。文件DSN可以由安裝了相同驅(qū)動程序的用戶共享。這是介于用戶DSN和系統(tǒng)DSN之間的一種共享情況,驅(qū)動程序。這頁列出了本機(jī)上所有安裝的數(shù)據(jù)庫驅(qū)動程序,其中列舉了每個(gè)驅(qū)動程序的名稱、版本提供商公司、驅(qū)動程序文件名,以及安裝日期。跟蹤。0DBC跟蹤允許創(chuàng)建調(diào)用ODBC的日志,提供給技術(shù)人員查看。頁面中可設(shè)定日志的路徑和文件名。技術(shù)人員可通過這里面的信息看到本機(jī)上所有的數(shù)據(jù)庫訪問的時(shí)間、用戶、出錯(cuò)信息等情況;也可以通過這個(gè)輔助調(diào)試應(yīng)用程序啟動VisualStudio的分析器來進(jìn)行ODBC的跟蹤。連接池。連接池允許應(yīng)用程序重用原來打開的連接。這樣可以節(jié)省連接到服務(wù)器的往返過程。關(guān)于。列出所有的ODBC的核心文件。,配置一個(gè)Access數(shù)據(jù)源的過程如下:在Windows系統(tǒng)下進(jìn)入控制面板,打開ODBC數(shù)據(jù)源,若是Windows2000平臺,則打開管理程序下的數(shù)據(jù)源ODBC,屏幕上將出現(xiàn)如圖所示的“ODBC數(shù)據(jù)源管理器”對話框,選擇所使用的數(shù)據(jù)庫驅(qū)動程序,如選擇MicrosoftAccessDriver(*.mdb),單擊“完成”按鈕,出現(xiàn)如圖所示的對話框,選擇“系統(tǒng)DSN”標(biāo)簽,即選擇“系統(tǒng)數(shù)據(jù)源”。要使系統(tǒng)上的所有應(yīng)用程序都可以使用它,必須選用系統(tǒng)DSN,這是建立Web站點(diǎn)的需要。單擊“添加”按鈕,進(jìn)入“創(chuàng)建新數(shù)據(jù)源”對話框,如圖所示,在“數(shù)據(jù)源名”輸入框中鍵入數(shù)據(jù)源名,單擊“選擇”按鈕為該數(shù)據(jù)源指定一個(gè)已創(chuàng)建好的Access數(shù)據(jù)庫(*.mdb),該數(shù)據(jù)庫應(yīng)該是在Web應(yīng)用程序中即將訪問的數(shù)據(jù)庫。單擊“確定”按鈕,回到“創(chuàng)建新數(shù)據(jù)源”對話框。單擊“確定”按鈕直到關(guān)閉ODBC數(shù)據(jù)管理器,此時(shí)完成一個(gè)數(shù)據(jù)源的建立過程。若要修改該數(shù)據(jù)源的配置,可在“ODBC數(shù)據(jù)源管理器”對話框中選定要更改的數(shù)據(jù)源,再單擊“配置”按鈕。,ODBC并不完美,他雖然統(tǒng)一了對多種常用DBMS的訪問,但是這個(gè)“訪問”的過程是非常困難的,他仍然存在大量的低級調(diào)用,程序員必須將大量的精力放在底層的數(shù)據(jù)通信中,而不能專注于所要處理的數(shù)據(jù)。為了改善這種極其不友好的接口,使得在程序開發(fā)中,數(shù)據(jù)庫訪問的工作更加容易,微軟提出里一個(gè)解決方案:DAO,5.2.3DAO的使用,DAO是Microsoft的一種用來訪問Jet引擎的方法。主要適用于單系統(tǒng)應(yīng)用程序或在小范圍本地分布中實(shí)現(xiàn)對桌面數(shù)據(jù)庫(如Access、FoxPro、dBase等)的訪問。MicrosoftJet數(shù)據(jù)庫引擎是一種數(shù)據(jù)管理組件,許多數(shù)據(jù)庫工具都是基于它實(shí)現(xiàn)的,例如MicrosoftAccess,MicrosoftVisualBasic以及一些Microsoft桌面數(shù)據(jù)庫驅(qū)動程序。,DAO結(jié)構(gòu)圖,DAO是完全面向?qū)ο蟮模瑢﹂_發(fā)人員來說,只需了解DAO的使用,而由數(shù)據(jù)庫引擎把DAO上的操作轉(zhuǎn)換為對具體的數(shù)據(jù)庫文件的操作。DAO對象模型是一個(gè)分層的樹形結(jié)構(gòu)。該結(jié)構(gòu)由對象和集合構(gòu)成。其中最重要,使用最頻繁的是RecordSet對象。,DAO對象層次圖,VC+在4.0版本之后增加了DAO的封裝,即MFC的DAO類,使得數(shù)據(jù)庫開發(fā)人員可以通過MicrosoftJet數(shù)據(jù)庫引擎訪問數(shù)據(jù)庫。MFCDAO類與DAO對象之間的對應(yīng)關(guān)系,MFCODBC和MFCDAO的區(qū)別:MFCDAO類使用MicrosoftJet數(shù)據(jù)庫引擎操作位于系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫中的數(shù)據(jù),它與基于ODBC的MFC數(shù)據(jù)庫類截然不同,DAO通過MicrosoftJet訪問數(shù)據(jù),而MFC的ODBC類通過ODBC和ODBC驅(qū)動程序操作數(shù)據(jù)。一般來說,在訪問MicrosoftJet數(shù)據(jù)庫引擎,基于DAO的MFC類比基于ODBC的MFC類處理能力更強(qiáng)大。,第五章數(shù)據(jù)庫訪問接口,5.1概述5.2ODBC與DAO對象5.3JDBC原理與應(yīng)用5.4OLEDB和ADO5.5數(shù)據(jù)庫中間件,5.3JDBC原理與應(yīng)用,5.3.1JDBC概述5.3.2JDBC的體系結(jié)構(gòu)5.3.3JDBC的接口5.3.4JDBC訪問數(shù)據(jù)庫的模式5.3.5JDBC訪問數(shù)據(jù)庫的方法,5.3.1JDBC概述,JDBC技術(shù)是JavaSoft公司設(shè)計(jì)的Java語言的數(shù)據(jù)庫訪問API。ODBC主要是對數(shù)據(jù)庫系統(tǒng)的C語言接口最初的Java語言并沒有數(shù)據(jù)庫訪問能力。JDBC是第一個(gè)支持Java語言的標(biāo)準(zhǔn)的數(shù)據(jù)庫API其目的在于使Java程序與數(shù)據(jù)庫服務(wù)器的連接更加方便。在功能方面JDBC與ODBC相同,它給程序員提供了統(tǒng)一的數(shù)據(jù)庫訪問接口。,與ODBC相似,JDBC提供給程序員的編程接口是由兩部分組成:一是面向應(yīng)用程序的編程接口JDBCAPI,它是為應(yīng)用程序員提供的,可以進(jìn)行數(shù)據(jù)庫連接和調(diào)用SOL語句訪問支持JDBC的數(shù)據(jù)庫,并得到返回結(jié)果;二是供底層開發(fā)的驅(qū)動程序接口JDBCDriverAPI,它是各個(gè)數(shù)據(jù)庫廠商提供的。值得一提的是,JavaSoft提供了一種特殊的驅(qū)動程序,JDBC-ODBC橋,它支持JDBC通過現(xiàn)有的ODBC來訪問數(shù)據(jù)庫系統(tǒng)。目前,JDBC已經(jīng)得到了許多廠商的支持,包括Borland,IBM、Oracle和Sybase等公司。當(dāng)前流行的大多數(shù)數(shù)據(jù)系統(tǒng)都推出了自己的JDBC驅(qū)動程序。,5.3.2JDBC的體系結(jié)構(gòu),JDBC的總體結(jié)構(gòu)類似于ODBC,也由四個(gè)部件組成:應(yīng)用程序接口、驅(qū)動程序管理器、數(shù)據(jù)庫驅(qū)動程序和數(shù)據(jù)源。,JDBC的數(shù)據(jù)庫驅(qū)動程序有四類:JDBC-ODBC橋(bridge)JDBC-ODBC橋利用ODBC驅(qū)動程序提供JDBC訪問。在服務(wù)器上必須可以安裝ODBC驅(qū)動程序。作為JdbcOdbc.class實(shí)現(xiàn)本地APIJava驅(qū)動程序這種類型的驅(qū)動程序把客戶機(jī)API上的JDBC調(diào)用利用JNI(JavaNativeINterface)轉(zhuǎn)換為本地?cái)?shù)據(jù)庫(如Oracle、Sybase、Informix、DB2或其它DBMS)的API調(diào)用。類型2通常比類型1的速度要快,網(wǎng)絡(luò)協(xié)議Java驅(qū)動程序:這種驅(qū)動程序?qū)DBC轉(zhuǎn)換為與DBMS無關(guān)的網(wǎng)絡(luò)協(xié)議,之后這種協(xié)議又被某個(gè)服務(wù)器轉(zhuǎn)換為一種DBMS協(xié)議。這種網(wǎng)絡(luò)服務(wù)器中間件能夠?qū)⑺募僇ava客戶機(jī)連接到多種不同的數(shù)據(jù)庫上。數(shù)據(jù)庫協(xié)議Java驅(qū)動程序:這種類型的驅(qū)動程序?qū)DBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議。這將允許從客戶機(jī)機(jī)器上直接調(diào)用DBMS服務(wù)器,是Intranet訪問的一個(gè)很實(shí)用的解決方法。第3類和第4類驅(qū)動程序?qū)⒊蔀镴DBC訪問數(shù)據(jù)庫的首選方法。第1類和第2類驅(qū)動程序在直接的純Java驅(qū)動程序還沒有上市前會作為過渡方案來使用。,5.3.3JDBC的接口,JDBC的實(shí)現(xiàn)類在java.sql包中,需要在程序中通過import語句引入。JDBC的接口分為兩個(gè)層次:面向程序開發(fā)人員的JDBCAPI底層的JDBCDriverAPIJDBCDriverAPI每個(gè)數(shù)據(jù)庫JDBC驅(qū)動必須提供一個(gè)響應(yīng)的驅(qū)動類。它由java.sql.Driver派生。大部分JDBC驅(qū)動只需要完成這些JDBCAPI所定義的抽象類就可以了。所有的JDBC驅(qū)動必須提供對java.sql.Connection、java.slq.Statement、java.sql.PreparedStatement和java.sql.ResultSet的實(shí)現(xiàn)。,JDBCAPI:被描述為一組抽象的Java接口,通過JDBCAPI,應(yīng)用程序可以對數(shù)據(jù)庫進(jìn)行打開連接,執(zhí)行SQL語句并且處理結(jié)果。JDBCAPI中最重要的接口是:Java.sql.DriverManager:處理驅(qū)動程序的調(diào)入,并且對產(chǎn)生的新的數(shù)據(jù)庫連接提供支持。Java.sql.Connection:代表對特定數(shù)據(jù)庫的連接。Java.sql.Statement:代表一個(gè)特定的容器,來對一個(gè)特定的數(shù)據(jù)庫執(zhí)行SQL語句。其中java.sql.Statement又有兩個(gè)子類Java.sql.PreparedStatement:用于執(zhí)行預(yù)編譯的SQL語句Java.sql.CallableStatement:用于執(zhí)行對一個(gè)數(shù)據(jù)庫內(nèi)嵌過程的調(diào)用Java.sql.ResultSet:控制對一個(gè)特定語句的數(shù)據(jù)的存取。,JDBC類圖,5.3.4JDBC訪問數(shù)據(jù)庫的模式,JDBC既支持兩層模型,也支持三層模型。JavaApplet最初的JDBC應(yīng)用是JavaApplet。它的實(shí)現(xiàn)方式是通過Web瀏覽器把應(yīng)用下載到客戶端運(yùn)行,在客戶端直接訪問數(shù)據(jù)庫。其工作過程是:當(dāng)Web瀏覽器從服務(wù)器上下載了包含有JavaApplet的HTML頁面時(shí),如其中的JavaApplet調(diào)用了JDBC,則瀏覽器運(yùn)行的JavaApplet直接與指定的數(shù)據(jù)庫建立連接,并向其提交SQL語句,Applet從數(shù)據(jù)庫接受返回的結(jié)果并進(jìn)行處理,將最后結(jié)果顯示在瀏覽器上。在客戶機(jī)上運(yùn)行JavaApplet通過JDBC技術(shù)可以繞過Web服務(wù)器直接和數(shù)據(jù)庫服務(wù)器連接,并直接把帶有結(jié)果的HTML頁返回客戶機(jī)瀏覽器。,JavaSerlets與JavaApplet不同,JavaServlets是運(yùn)行于Web服務(wù)器端的程序,能夠象CGI腳本一樣擴(kuò)展Web服務(wù)器功能。它在初始化時(shí)裝入Web服務(wù)器的存儲空間,并成為服務(wù)器的一個(gè)組成部分。其工作過程是:當(dāng)瀏覽器向服務(wù)器發(fā)出請求時(shí),服務(wù)器將該請求傳遞給一個(gè)Servlet,該Servlet通過JDBC向數(shù)據(jù)庫發(fā)出SQL請求并構(gòu)造響應(yīng)結(jié)果,然后通過服務(wù)器將結(jié)果傳遞回瀏覽器。使用JavaServlets雖然可以完全實(shí)現(xiàn)通過Web訪問數(shù)據(jù)庫。但是Servlet生成網(wǎng)頁的方法是在Java類中嵌入HTML標(biāo)簽和表述代碼。這就意味著改變表述代碼需要修改和重新編譯Servlets源文件。因?yàn)樵O(shè)計(jì)HTML頁面的設(shè)計(jì)人員可能與編寫Servlets代碼的開發(fā)人員不是同一個(gè)人,更新基于Servlets的Web應(yīng)用程序就成了一件非常棘手的事情。,JavaServerPage,即JSPJSP是JavaServlets的一個(gè)擴(kuò)展,具有Servlets的所有優(yōu)勢。不同的是它將功能實(shí)現(xiàn)和網(wǎng)頁設(shè)計(jì)的功能分開了。JSP是Sun公司倡導(dǎo)的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),是一種在服務(wù)器端編譯執(zhí)行的Web數(shù)據(jù)庫系統(tǒng)應(yīng)用程序編程語言,其腳本語言是Java,通過在HTML文件中加人Java程序片段和JSP標(biāo)記構(gòu)成JSP網(wǎng)頁。JSP技術(shù)可以讓各公司采用各類Web服務(wù)器、應(yīng)用服務(wù)器、瀏覽器和開發(fā)工具等快速創(chuàng)建Web網(wǎng)頁。,5.3.5JDBC訪問數(shù)據(jù)庫的方法,DriverManager,Driver,Connection,Statement,ResultSet,JDBC類的使用,使用JDBC的第一步是安裝驅(qū)動程序。大多數(shù)數(shù)據(jù)庫都有JDBC驅(qū)動程序,常用的JDBC驅(qū)動程序如圖所示。,連接數(shù)據(jù)庫前先要加載驅(qū)動程序importjava.sql.*Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class.forName(“jdbc.driver_class_name”);常見的有:com.microsoft.jdbc.sqlserver.SQLServerDriverorg.gjt.mm.mysql.DriverOracle.jdbc.driver.OracleDriver,建立與數(shù)據(jù)庫之間的連接,也就是創(chuàng)建一個(gè)Connection的實(shí)例。DriverManager類的getConnection()方法將建立數(shù)據(jù)庫的連接:publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException在程序的最后,應(yīng)該關(guān)閉Connection對象:publicvoidclose()throwsSQLException不同的驅(qū)動有不同的URL寫法,如SQLServer下的URL:jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=xx,使用Connection接口的方法publicvoidcommit()throwsSQLExceptionpublicStatementcreateStatement()throwsSQLExceptionpublicbooleangetAutoCommit()throwsSQLExceptionpublicCallableStatementprepareCall(Stringsql)throwsSQLException,Statement對象用于將SQL語句發(fā)送到數(shù)據(jù)庫中。存在3種Statement對象:StatementPreparedStatement(從Statement繼承而來)CallableStatement(從PreparedStatement繼承而來),Statement接口提供了兩種執(zhí)行SQL語句的常用方法:publicResultSetexecuteQuery(Stringsql)throwsSQLException用于產(chǎn)生單個(gè)ResultSet的語句,例如SELECT語句。publicintexecuteUpdate(Stringsql)throwsSQLException用于執(zhí)行INSERT、UPDATE或DELETE語句以及SQLDDL語句,例如CREATETABLE和DROPTABLE。該方法返回一個(gè)整數(shù),指示受影響的行數(shù)。,ResultSet包含符合SQL語句執(zhí)行結(jié)果所有行,并且它通過一套get方法提供了對這些行中數(shù)據(jù)的訪問,常用的get方法有:intgetInt(intcolumnIndex),取得當(dāng)前行中第columnIndex列的整數(shù)的值。intgetInt(StringcolumnName),取得當(dāng)前行中列名為columnName的整數(shù)的值。其他方法:getDate(intcolumnIndex)getDate(StringcolumnName)getString(intcolumnIndex),getString(StringcolumnName)ResultSet維護(hù)指向其當(dāng)前數(shù)據(jù)行的光標(biāo),讓光標(biāo)向下移動一行的方法是:publicbooleannext()throwsSQLException,利用ResultSet對象在建立時(shí),記錄指針指向第一條記錄之前,結(jié)合ResultSet對象提供的next方法,在while循環(huán)中移動記錄指針,向下逐條地將數(shù)據(jù)庫中的記錄依次獲取,在移動到記錄的最后一條,由next方法返回值false來結(jié)束循環(huán)。語法結(jié)構(gòu):while(rs.next()rs.getXXX(“字段名稱”);,結(jié)果集類型有3種:ResultSet.TYPE_FORWORD_ONLY:指定ResultSet對象是不可滾動,這是默認(rèn)值。ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet對象是可滾動的,但是對數(shù)據(jù)庫中修改不敏感。ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet對象是可滾動的,而且對數(shù)據(jù)庫的修改敏感。,總結(jié):JDBC訪問數(shù)據(jù)庫基本方法,Class.forName(JDBC驅(qū)動程序);,Connectionconn=DriverManager.getConnection(相應(yīng)JDBC驅(qū)動程序的連接串);,Statementstmt=conn.createStatement();,ResultSetrs=stmt.executeQuery(DQL語句);/如果是數(shù)據(jù)查詢,stmt.executeUpdate(DML語句);/如果是數(shù)據(jù)操作,第五章數(shù)據(jù)庫訪問接口,5.1概述5.2ODBC與DAO對象5.3JDBC原理與應(yīng)用5.4OLEDB和ADO5.5數(shù)據(jù)庫中間件,5.4OLEDB和ADO,5.4.1概述5.4.2OLEDB5.4.3ADO,5.4.1概述,隨著網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫技術(shù)的不斷發(fā)展,需要將不同形式的數(shù)據(jù)進(jìn)行集成。傳統(tǒng)的方法:將數(shù)據(jù)全移植到DBMS中處理。但是這種間接訪問方式數(shù)據(jù)更新不及時(shí),空間資源冗余,訪問效率低下。微軟公司推出UDA(UniversalDataAccess,統(tǒng)一數(shù)據(jù)訪問技術(shù))較好的解決了這個(gè)問題。為關(guān)系型或非關(guān)系型數(shù)據(jù)源提供了統(tǒng)一的,獨(dú)立于開發(fā)工具和開發(fā)語言的接口。,UDA通過MicrosoftDataAccessComponents(MDAC)來實(shí)現(xiàn),而MDAC則包括ADO、OpenDatabaseConnectivity(ODBC)與OLEDB。其中,OLEDB被微軟公司歸類為系統(tǒng)級的接口,定義了一套COM接口,提供從關(guān)聯(lián)數(shù)據(jù)庫及文件系統(tǒng)訪問數(shù)據(jù)的能力,設(shè)計(jì)用來給系統(tǒng)級的程序員使用。它雖然靈活、功能強(qiáng)大,但仍屬于較低級的接口,并且對程序員的要求較高,需要較高水平的知識。ADO是在OLEDB之上的一個(gè)層面,被用來溝通這個(gè)低級接口與數(shù)據(jù)庫,簡化并實(shí)現(xiàn)OLEDB的強(qiáng)大功能,它是為應(yīng)用程序員設(shè)計(jì)的。ODBC為了向后兼容也包含在MDAC中,但ODBC有被OLEDB替代的趨勢。,ADO在訪問數(shù)據(jù)存儲體時(shí)的層次關(guān)系圖,ADO(ActiveDataObjects)是微軟公司推出的一個(gè)功能強(qiáng)大的數(shù)據(jù)庫應(yīng)用編程接口,它的主要功能是用于應(yīng)用程序與OLEDB兼容的數(shù)據(jù)源的連接。應(yīng)用程序可以通過ADO實(shí)現(xiàn)對各種類型數(shù)據(jù)庫的連接,對數(shù)據(jù)的查詢、修改、更新等。因而,通過ADO存取數(shù)據(jù)已經(jīng)成為流行的選擇。,5.4.2OLEDB,OLEDB:數(shù)據(jù)庫鏈接和嵌入對象(ObjectLinkingandEmbeddingDataBase)。是微軟提出的基于COM思想且面向?qū)ο蟮囊环N技術(shù)標(biāo)準(zhǔn),目的是提供一種統(tǒng)一的數(shù)據(jù)訪問接口訪問各種數(shù)據(jù)源,這里所說的“數(shù)據(jù)”除了標(biāo)準(zhǔn)的關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)之外,還包括其他形式的數(shù)據(jù)。OLEDB標(biāo)準(zhǔn)的核心內(nèi)容就是要求對以上這些各種各樣的數(shù)據(jù)存儲(DataStore)都提供一種相同的訪問接口,使得數(shù)據(jù)的使用者(應(yīng)用程序)可以使用同樣的方法訪問各種數(shù)據(jù),而不用考慮數(shù)據(jù)的具體存儲地點(diǎn)、格式或類型。,與ODBCAPI一樣,OLEDB也屬于低層的數(shù)據(jù)庫編程接口,OLEDB結(jié)合了ODBC對關(guān)系型數(shù)據(jù)庫的操作功能,并進(jìn)行了擴(kuò)展,可以訪問非關(guān)系型數(shù)據(jù)庫源。OLEDB對ODBC進(jìn)行了兩個(gè)方面的擴(kuò)展:一是提供了一個(gè)數(shù)據(jù)庫編程的OLE接口,即COM;二是提供了一個(gè)可用于關(guān)系型和非關(guān)系型數(shù)據(jù)源的接口。OLEDB標(biāo)準(zhǔn)的具體實(shí)現(xiàn)是通過一組C+API函數(shù),就像ODBC標(biāo)準(zhǔn)中的ODBCAPI一樣,,利用OLEDB進(jìn)行軟件開發(fā)應(yīng)該包括兩類軟件:OLEDB客戶程序(Consumer)和OLEDB供應(yīng)程序(Provider)OLEDB客戶程序是使用OLEDB接口的應(yīng)用程序,例如,采用C+編寫的使用OLEDB連接數(shù)據(jù)庫服務(wù)器的所有應(yīng)用程序都是OLEDB客戶程序。OLEDB供應(yīng)程序是實(shí)現(xiàn)OLEDB接口并實(shí)際與數(shù)據(jù)庫服務(wù)器通信的DLL。在功能上,OLEDB同ODBC驅(qū)動程序相同,不過OLEDB實(shí)現(xiàn)的是COM接口,而不是API接口。,5.4.3ADO,ADO(ActiveXDataObject,ActiveX數(shù)據(jù)對象)是微軟于1996年冬推出的一種面向?qū)ο蟮?、基于COM思想的數(shù)據(jù)庫訪問接口。為了使流行的各種編程語言都可以編寫符合OLEDB標(biāo)準(zhǔn)的應(yīng)用程序,微軟在OLEDBAPI之上,提供了一種面向?qū)ο?、與語言無關(guān)的應(yīng)用編程接口,這就是ActiveXDataObjects,簡稱ADO。實(shí)質(zhì)上,ADO就是將OLEDB的面向C+的復(fù)雜接口封裝起來,提供了便于操作的接口。還可以說ADO其實(shí)只是一個(gè)應(yīng)用程序?qū)哟蔚慕缑?,它用OLEDB來與數(shù)據(jù)庫通信,ADO為OLEDB提供高層應(yīng)用API函數(shù)。ADO是ASP內(nèi)置的服務(wù)器組件,ADO同OLEDB、數(shù)據(jù)庫應(yīng)用以及數(shù)據(jù)源之間的關(guān)系,ADO是DAO后繼產(chǎn)品,它擴(kuò)展了DAO和RDO所使用的對象模型,因?yàn)樗俚膶ο螅嗟膶傩?、方法(和參?shù))以及事件。ADO提供了一種數(shù)據(jù)庫編程對象模型,類似于DAO的對象模型,但比DAO有更高的靈活性。ADO簡化了OLEDB,屬于高層的數(shù)據(jù)庫接口。另外同OLEDB相比,能夠使用ADO的編程語言更多。在使用上一般具有以下兩種層次關(guān)系:應(yīng)用程序-ADO-OLEDB-ODBC-數(shù)據(jù)源應(yīng)用程序-ADO-OLEDB-數(shù)據(jù)源。,ADO的對象層次圖,ADO技術(shù)是通過ADO對象的屬性、方法來完成相應(yīng)的數(shù)據(jù)庫訪問的。ADO共有以下7個(gè)獨(dú)立對象類。Connection:連接對象,表示與數(shù)據(jù)源的連接關(guān)系Command:命令對象,用于定義一些特定的命令語法,以執(zhí)行相應(yīng)的動作RecordSet:記錄集對象,用于表示來自數(shù)據(jù)庫表或命令執(zhí)行結(jié)果的記錄Property:屬性對象,用于描述對象的屬性,每個(gè)ADO對象都有一組惟一的屬性來描述或控制對象的行為Error:錯(cuò)誤對象,用于描述Connection對象在連接數(shù)據(jù)庫時(shí)發(fā)生的錯(cuò)誤Field:域(字段)對象,用來表示RecordSet對象的字段,一個(gè)記錄行包含一個(gè)或多個(gè)域(字段)Parameter:參數(shù)對象,用來描述Command對象的命令參數(shù),是命令所需要的變量部分,ADO實(shí)際上是OLEDB的應(yīng)用層接口,可以處理各種OLEDB支持的數(shù)據(jù)源。在ADO模型中,主體對象只有三個(gè):Connection、Command和Recordset。,通常情況下,一個(gè)基于ADO的數(shù)據(jù)庫應(yīng)用使用如下過程操作數(shù)據(jù)源里的數(shù)據(jù):(1)創(chuàng)建一個(gè)Connection對象。定義用于連接的字符串信息,包括數(shù)據(jù)源名稱、用戶ID、口令、連接超時(shí)、缺省數(shù)據(jù)庫以及光標(biāo)的位置。一個(gè)Connection對象代表了同數(shù)據(jù)源的一次會話??梢酝ㄟ^Connection對象控制事務(wù),即執(zhí)行BeginTrans、CommitTrans和RollbackTrans方法。(2)打開數(shù)據(jù)源,建立同數(shù)據(jù)源的連接。(3)執(zhí)行一個(gè)SQL命令。一旦連接成功,就可以運(yùn)行查詢了??梢砸援惒椒绞竭\(yùn)行查詢,也可以異步地處理查詢結(jié)果,ADO會通知提供者后臺提供數(shù)據(jù)。這樣可以讓應(yīng)用程序繼續(xù)處理其它事情而不必等待。(4)使用結(jié)果集。完成了查詢以后,結(jié)果集就可以被應(yīng)用程序使用了。在不同的光標(biāo)類型下,可以在客戶端或者服務(wù)器端瀏覽和修改行數(shù)據(jù)。(5)終止連接。當(dāng)完成了所有數(shù)據(jù)操作后,可以銷毀這個(gè)同數(shù)據(jù)源的連接。,用Connection對象連接數(shù)據(jù)庫,Connection對象的常用屬性和方法Connection對象的常用屬性:Mode:用于設(shè)置數(shù)據(jù)的可用權(quán)限,其屬性值是系統(tǒng)定義的一些常量,只能在關(guān)閉Connection對象時(shí)設(shè)置。State:指明Connection對象的當(dāng)前狀態(tài),包括關(guān)閉、打開、正在連接、正在執(zhí)行命令等。ConnectionTimeout:設(shè)置對象建立連接操作失敗時(shí)的等待時(shí)間。DefaultDatabase:設(shè)置連接數(shù)據(jù)源的默認(rèn)數(shù)據(jù)庫。ConnectionString:設(shè)置連接數(shù)據(jù)源的一些信息,Connection對象的常用方法:Open:用于建立到數(shù)據(jù)源的物理連接。Execute:用于執(zhí)行指定的查詢、SQL語句、存儲過程或特定的文本。Cancel:用于取消用異步方式執(zhí)行的ExecuteOpen方法的調(diào)用。Close:用于關(guān)閉一個(gè)連接。在對Connection對象操作結(jié)束時(shí),使用Close方法釋放所有與之關(guān)聯(lián)的系統(tǒng)資源,打開和關(guān)閉數(shù)據(jù)庫連接,打開Connection對象,打開Connection對象的Open方法的語法格式如下:Open(ConnectionString,UserID,Password,Options)關(guān)閉Connection對象,關(guān)閉Connection對象的Close方法的語法格式如下:對象實(shí)例名.Close,通過Connection對象執(zhí)行SQL語句,打開Connection對象后,可以通過對象的Execute方法實(shí)現(xiàn)SQL語句的執(zhí)行過程。Execute方法的語法格式如下:Execute(CommandText,RecordsAffected,Option),Connection對象的事務(wù)處理,本例是進(jìn)行事務(wù)處理的一段代碼,用Command對象執(zhí)行數(shù)據(jù)庫操作,Command對象的常用屬性和方法執(zhí)行SQL語句可以用打開的Connection對象,也可以用ADO的Command(命令)對象達(dá)到同樣的目的。Command對象的常用屬性和方法如下:ActiveConnection屬性:指定與Command對象關(guān)聯(lián)的已打開的連接對象。Name屬性:指定Command對象的名字。CommandText屬性:定義一個(gè)可執(zhí)行的命令串。CommandType屬性:指定命令的類型。Execute方法:執(zhí)行命令,用Command對象執(zhí)行SQL語句,用Command對象的Execute方法從sales表中檢索出所有記錄。源程序如下:,用Command對象調(diào)用存儲過程,在Web數(shù)據(jù)庫程序設(shè)計(jì)中使用SQL存儲過程有下列好處:執(zhí)行SQL存儲過程比執(zhí)行SQL命令快得多。當(dāng)一個(gè)SQL語句包含在存儲過程中時(shí),服務(wù)器不必每次執(zhí)行它時(shí)都要分析和編譯它。在多個(gè)網(wǎng)頁中可以調(diào)用同一個(gè)存儲過程,使站點(diǎn)易于維護(hù)。一個(gè)存儲過程可以包含多個(gè)SQL語句,這意味著可用存儲過程建立復(fù)雜的查詢。存儲過程可以接收和返回參數(shù),這是實(shí)現(xiàn)復(fù)雜數(shù)據(jù)庫訪問功能的必要基礎(chǔ)。,存儲過程的調(diào)用形式,存儲過程的調(diào)用也是一個(gè)Command對象的執(zhí)行過程實(shí)現(xiàn)對存儲過程HitCount的調(diào)用。源程序如下:,用Parameter對象實(shí)現(xiàn)存儲過程的參數(shù)傳遞,Parameter對象代表基于參數(shù)化查詢或與存儲過程的Command對象相關(guān)聯(lián)的輸入、輸出參數(shù)及存儲過程的返回值。用Command對象的CreateParameter方法可以建立一個(gè)參數(shù)對象,其語法格式如下:CreateParameter(Name,Type,Direction,Size,Value),用RecordSet對象控制數(shù)據(jù),RecordSet對象可以實(shí)現(xiàn)以下功能:指定可以檢查的記錄。移動記錄。添加、更改和刪除記錄。通過更改記錄更新數(shù)據(jù)源。管理RecordSet的總體狀態(tài),RecordSet對象的創(chuàng)建和數(shù)據(jù)讀取,RecordSet對象的創(chuàng)建使用Server.CreateObject(“ADODB.RecordSet”)創(chuàng)建RecordSet對象,然后通過打開RecordSet對象創(chuàng)建一個(gè)與某個(gè)數(shù)據(jù)庫表相關(guān)聯(lián)的RecordSet對象實(shí)例可以采用Connection和Command對象的Execute方法,當(dāng)用Execute方法從一個(gè)數(shù)據(jù)庫返回查詢結(jié)果時(shí),將自動創(chuàng)建一個(gè)RecordSet對象,RecordSet對象數(shù)據(jù)的讀取在Web頁面上顯示表sales的所有記錄數(shù)據(jù),讀取字段值時(shí)利用字段順序號。源程序如下ShowTablesales,記錄集記錄間的移動方法和記錄集游標(biāo),移動方法包括:MoveNumRecords:在記錄集中向前或向后移動指定條記錄MoveFirst:移動至記錄集中的第一條記錄MoveLast:移動至記錄集中的最后一條記錄MovePrevious:移動至當(dāng)前記錄的上一條記錄MoveNext:移動至當(dāng)前記錄的下一條記錄,游標(biāo)的類型有以下4種:adOpenFowardOnly:前向游標(biāo),只能在記錄集中向前移動。adOpenKeyset:可在記錄集中向前或向后移動。若另一用戶刪除或改變一條記錄,記錄集將反映這種變化,但若增加一條新記錄,新記錄不會出現(xiàn)在記錄集中。adOpenDynamic:可在記錄集中向前或向后移動。他用戶造成的任何改變都會動態(tài)反映在記錄集中。adOpenStatic:可在記錄集中向前或向后移動。不

溫馨提示

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

評論

0/150

提交評論