第5章 開放數(shù)據(jù)庫互連_第1頁
第5章 開放數(shù)據(jù)庫互連_第2頁
第5章 開放數(shù)據(jù)庫互連_第3頁
第5章 開放數(shù)據(jù)庫互連_第4頁
第5章 開放數(shù)據(jù)庫互連_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章開放數(shù)據(jù)庫互聯(lián)5.1開放的數(shù)據(jù)庫訪問接口5.2ODBC技術(shù)5.3JDBC原理與應(yīng)用5.4OLEDB和ADO5.5數(shù)據(jù)庫中間件網(wǎng)絡(luò)數(shù)據(jù)庫1/14/20231濟(jì)南大學(xué)管理學(xué)院信管系第一節(jié)開放的數(shù)據(jù)庫訪問接口

目前流行的開放數(shù)據(jù)庫訪問接口有:ODBC、JDBC、OLEDB和數(shù)據(jù)庫網(wǎng)關(guān)。開放的數(shù)據(jù)庫訪問接口為數(shù)據(jù)庫應(yīng)用程序開發(fā)人員訪問不同的數(shù)據(jù)庫提供了統(tǒng)一的訪問方式,方便實(shí)現(xiàn)了開放數(shù)據(jù)庫的互聯(lián),并大大減小了編程的工作量和開發(fā)時(shí)間。

1ODBC

ODBC是Microsoft公司推出的一個(gè)開放式數(shù)據(jù)庫接口標(biāo)準(zhǔn)。ODBC為應(yīng)用程序和驅(qū)動(dòng)模塊提供一個(gè)定義良好的、不依賴于數(shù)據(jù)庫的應(yīng)用程序接口(API),并且保持了與SQL標(biāo)準(zhǔn)的一致性。第五章數(shù)據(jù)庫互聯(lián)1/14/20232濟(jì)南大學(xué)管理學(xué)院信管系

2JDBC

JDBC(JavaDatabaseConnectivity)是JavaSoft公司提供的第一個(gè)支持Java語言的數(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ù)連接方式。Java開發(fā)人員只需面對簡單的數(shù)據(jù)庫界面而進(jìn)行操作,使得獨(dú)立于DBMS的Java應(yīng)用程序的開發(fā)工具和產(chǎn)品成為可能。

JDBC主要由兩層組成:JDBC應(yīng)用程序接口(JDBCAPI)和JDBC驅(qū)動(dòng)應(yīng)用程序接口。

第五章數(shù)據(jù)庫互聯(lián)1/14/20233濟(jì)南大學(xué)管理學(xué)院信管系

3OLEDB

OLEDB定義了一個(gè)數(shù)據(jù)訪問服務(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ù)庫。

第五章數(shù)據(jù)庫互聯(lián)1/14/20234濟(jì)南大學(xué)管理學(xué)院信管系

4數(shù)據(jù)庫網(wǎng)關(guān)

數(shù)據(jù)庫網(wǎng)關(guān)也叫SQL網(wǎng)關(guān),是一種應(yīng)用程序接口(API),通過使用同一接口提供對運(yùn)行在多種平臺(tái)上的不同數(shù)據(jù)庫的訪問。它們類似于實(shí)際的數(shù)據(jù)庫中間件產(chǎn)品,為開發(fā)者提供訪問任意數(shù)目數(shù)據(jù)庫的接口,包括一些運(yùn)行在典型的不易訪問的環(huán)境下的數(shù)據(jù)庫。

第五章數(shù)據(jù)庫互聯(lián)1/14/20235濟(jì)南大學(xué)管理學(xué)院信管系第二節(jié)ODBC技術(shù)在1991年11月.Microsoft公司推出了ODBC,目的是為了在Windows操作系統(tǒng)下實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫的互訪和通訊。它為異構(gòu)數(shù)據(jù)庫提供了一種交互操作的可能。Microsoft公司不僅將ODBC作為OLEDB的主要部分,而且將其作為W0SA(WindowsOpenSystemArchitecture,Windows開放系統(tǒng)體系結(jié)構(gòu))的主要組成部分和MAPI(MessageAPI),TAPI(Tete—phonyAPI)一起構(gòu)成了Microsoft公司的工業(yè)界計(jì)算機(jī)解決方案。第五章數(shù)據(jù)庫互聯(lián)1/14/20236濟(jì)南大學(xué)管理學(xué)院信管系基本思想:(1)提供獨(dú)立程序來提取數(shù)據(jù)信息,并具有向應(yīng)用程序輸入數(shù)據(jù)的方法。由于有許多可行的通信方法、數(shù)據(jù)協(xié)議和DBMS能力,所以O(shè)DBC是通過定義標(biāo)準(zhǔn)接口來允許使用不同技術(shù),通過特定通信方法訪問特定數(shù)據(jù)源。(2)一個(gè)基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫操作由對應(yīng)的DBMS的ODBC驅(qū)動(dòng)程序完成。第二節(jié)ODBC技術(shù)第五章數(shù)據(jù)庫互聯(lián)1/14/20237濟(jì)南大學(xué)管理學(xué)院信管系第一個(gè)具有ODBC功能的產(chǎn)品是Microsoft公司的MSAccess2.0,它可以訪問多種結(jié)構(gòu)的數(shù)據(jù)庫系統(tǒng)。到現(xiàn)在為止已經(jīng)有了數(shù)百種數(shù)據(jù)庫產(chǎn)品能夠提供ODBC功能,例如MS-dBase、MSFoxfro、Q+EDatabaselibrary等,并且現(xiàn)在每月還不斷地有新的軟件出現(xiàn)。ODBC的發(fā)展得到了工業(yè)界和第三方軟件商的支持。現(xiàn)在ODBC并不僅僅限于在Windows的環(huán)境下使用。在1994年l0月,Vlsgenie公司在Microsoft公司的授權(quán)下推出了第一個(gè)非Windows平臺(tái)的ODBC驅(qū)動(dòng)程序以及相應(yīng)的API,它可以在Unix下使用。目前ODBC可以在許多的平臺(tái)上使用,如:0s/2、SunOS、HP—UINX、Solaris、PoweMae、AIX、Irix、SCOUNIX等。并且ODBC可以與Apple公司的DAL(DataAccessLanguage,數(shù)據(jù)存取對象語言)互聯(lián)操作,以及與IBM公司的RDA(DistributedRelationalDatabaseArchitecture,互聯(lián)數(shù)據(jù)結(jié)構(gòu))實(shí)現(xiàn)互聯(lián)。第五章數(shù)據(jù)庫互聯(lián)1/14/20238濟(jì)南大學(xué)管理學(xué)院信管系5.2.1ODBC的組成結(jié)構(gòu)

一個(gè)完整的ODBC由下列四個(gè)部件組成:應(yīng)用程序接口、驅(qū)動(dòng)程序管理器、數(shù)據(jù)庫驅(qū)動(dòng)程序和數(shù)據(jù)源。第五章數(shù)據(jù)庫互聯(lián)ODBC數(shù)據(jù)庫應(yīng)用程序驅(qū)動(dòng)程序管理器SQLServer驅(qū)動(dòng)程序

Oracle驅(qū)動(dòng)程序Sybase驅(qū)動(dòng)程序······SQLServer數(shù)據(jù)源Oracle數(shù)據(jù)源Sybase數(shù)據(jù)源······1/14/20239濟(jì)南大學(xué)管理學(xué)院信管系(1)應(yīng)用程序接口(Application)應(yīng)用程序的主要功能是:處理并調(diào)用ODBC函數(shù),發(fā)送對數(shù)據(jù)庫的SQL請求及取得結(jié)果。其主要任務(wù)是:連接數(shù)據(jù)庫;向數(shù)據(jù)源發(fā)送SQL語句;為SQL語句執(zhí)行結(jié)果分配存儲(chǔ)空間,定義所讀取的數(shù)據(jù)格式;讀取結(jié)果;處理錯(cuò)誤;向用戶提交處理結(jié)果;請求事務(wù)的提交和回退操作;斷開與數(shù)據(jù)源的連接。(2)驅(qū)動(dòng)程序管理器(DriverManager)

驅(qū)動(dòng)程序管理器是一個(gè)帶有輸入程序的動(dòng)態(tài)鏈接庫(DLL),主要目的是為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動(dòng)程序,處理ODBC調(diào)用的初始化調(diào)用,提供ODBC調(diào)用的參數(shù)有效性和序列有效性。其主要功能有:為應(yīng)用程序加載DBMS驅(qū)動(dòng)程序;檢查ODBC調(diào)用參數(shù)的合法性和記錄ODBC函數(shù)的調(diào)用;為不同驅(qū)動(dòng)程序的ODBC函數(shù)提供單一的入口;調(diào)用正確的DBMS驅(qū)動(dòng)程序;提供驅(qū)動(dòng)程序信息。第五章數(shù)據(jù)庫互聯(lián)。在0DBC2.0的l6位版本中包含在ODBC.DLL中(在32位版本中,它是包含在ODBC32.DLL中),位于windowsxp/2000的windows\system321/14/202310濟(jì)南大學(xué)管理學(xué)院信管系(3)數(shù)據(jù)庫驅(qū)動(dòng)程序(Driver)

數(shù)據(jù)庫驅(qū)動(dòng)程序是一個(gè)完成ODBC函數(shù)調(diào)用并與數(shù)據(jù)之間相互影響的DLL,其任務(wù)有:建立應(yīng)用程序與數(shù)據(jù)源的連接;向數(shù)據(jù)源提交用戶請求執(zhí)行的SQL語句;根據(jù)應(yīng)用程序的要求,將發(fā)送給數(shù)據(jù)元的數(shù)據(jù)或是從數(shù)據(jù)源返回的數(shù)據(jù)進(jìn)行數(shù)據(jù)格式和類型轉(zhuǎn)換;把處理結(jié)果返回給應(yīng)用程序;將執(zhí)行過程中DBS返回的錯(cuò)誤轉(zhuǎn)換為ODBC定義的標(biāo)準(zhǔn)錯(cuò)誤代碼,并返回給應(yīng)用程序;根據(jù)需要定義和使用光環(huán)。(4)數(shù)據(jù)源(Datasource)

數(shù)據(jù)源是由用戶想要存取的數(shù)據(jù)以及與它相關(guān)的操作系統(tǒng)、DBMS和用于訪問DBMS的網(wǎng)絡(luò)平臺(tái)組成,它負(fù)責(zé)為應(yīng)用程序存儲(chǔ)和管理數(shù)據(jù)。數(shù)據(jù)源包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,實(shí)際上是一種數(shù)據(jù)連接的抽象。

數(shù)據(jù)源分為用戶數(shù)據(jù)源、系統(tǒng)數(shù)據(jù)源和文件數(shù)據(jù)源。第五章數(shù)據(jù)庫互聯(lián)1/14/202311濟(jì)南大學(xué)管理學(xué)院信管系第五章數(shù)據(jù)庫互聯(lián)5.2.2ODBC的基本工作流程

位置、類型、驅(qū)動(dòng)程序等注冊數(shù)據(jù)源名稱數(shù)據(jù)源名稱數(shù)據(jù)源名稱數(shù)據(jù)源名稱數(shù)據(jù)源名稱1/14/202312濟(jì)南大學(xué)管理學(xué)院信管系

ODBCAPI是由一組函數(shù)調(diào)用組成的,其核心是SQL。ODBC函數(shù)的主要功能就是將SQL語句發(fā)送到目標(biāo)數(shù)據(jù)庫中,然后處理SQL語句返回的結(jié)果。編寫ODBC程序的基本步驟是:(1)為ODBC分配環(huán)境句柄;(2)分配一個(gè)連接句柄;(3)連接到數(shù)據(jù)庫;(4)用SQL命令分配一個(gè)語句句柄;(5)傳送該命令;(6)關(guān)閉連接;(7)解除連接和環(huán)境句柄。第五章數(shù)據(jù)庫互聯(lián)5.2.3使用ODBCAPI建立應(yīng)用程序

1/14/202313濟(jì)南大學(xué)管理學(xué)院信管系

1.環(huán)境句柄環(huán)境句柄(EnvironmentHandles)是ODBC中整個(gè)上下文的句柄,代表一個(gè)存儲(chǔ)區(qū),該存儲(chǔ)區(qū)用來保存合法的連接句柄、當(dāng)前活動(dòng)的連接句柄等全局信息。ODBC用數(shù)據(jù)類型HENV來定義環(huán)境句柄。一個(gè)應(yīng)用程序只用一個(gè)環(huán)境句柄,并且必須在連接數(shù)據(jù)庫之前申請環(huán)境句柄。第五章數(shù)據(jù)庫互聯(lián)(1)分配環(huán)境旬柄函數(shù)其格式如下:SQLAllocEnv(phenv)其中,參數(shù)phenv是指向HENV型變量的一個(gè)指針,將返回環(huán)境句柄的內(nèi)存地址指針。(2)釋放環(huán)境句柄函數(shù)其格式如下:SQLFreeEnv(henv)1/14/202314濟(jì)南大學(xué)管理學(xué)院信管系

2.連接句柄連接句柄(ConnectionHandles)表示應(yīng)用系統(tǒng)與數(shù)據(jù)源之間的連接。對應(yīng)用系統(tǒng)每一個(gè)要連接的數(shù)據(jù)源都必須分配一個(gè)連接句柄。ODBC用數(shù)據(jù)類型HDBC來定義連接句柄。每一個(gè)連接句柄只與一個(gè)環(huán)境句柄相連,一個(gè)環(huán)境句柄可與多個(gè)連接句柄相連。

第五章數(shù)據(jù)庫互聯(lián)(1)分配連接句柄函數(shù)其格式如下:SQLAlocConnect(henv,phdbc)其中,參數(shù)henv是環(huán)境句柄,phdbc是指向HDBC型變量的一個(gè)指針。(2)釋放連接句柄函數(shù)其格式如下:SQLFteeCounect(hdbc)其中,參數(shù)hdbc是連接句柄變量。1/14/202315濟(jì)南大學(xué)管理學(xué)院信管系

3.語句句柄語句句柄(StatementsHandles)代表一個(gè)存儲(chǔ)某SQL語句信息的存儲(chǔ)區(qū)。ODBC用數(shù)據(jù)類型HSTMT來定義語句句柄。應(yīng)用程序在提交SQL語句前必須先申請一個(gè)語句句柄,每一個(gè)語句句柄只與一個(gè)連接句柄相連,一個(gè)連接句柄可與多個(gè)語句句柄相連。第五章數(shù)據(jù)庫互聯(lián)(1)分配語句句柄函數(shù)其格式如下:SQLAlloctmt(hdbc,phstmt)其中,第一個(gè)參數(shù)是一個(gè)有效的、已與一個(gè)數(shù)據(jù)源連接的連接句柄,第二個(gè)參數(shù)是一個(gè)指向語句句柄存儲(chǔ)區(qū)的指針。(2)釋放語句句柄函數(shù)其格式如下:SQLFreestmt(hstmt,foption)其中,第一個(gè)參數(shù)是一個(gè)有效的語句句柄,第二個(gè)參數(shù)通過傳遞如下4個(gè)值中的一個(gè),指定釋放這個(gè)句柄的哪些資源。1/14/202316濟(jì)南大學(xué)管理學(xué)院信管系在分配了環(huán)境句柄和連接句柄之后,就可以準(zhǔn)備與ODBC的數(shù)據(jù)源連接。

1連接數(shù)據(jù)源的函數(shù)連接數(shù)據(jù)源的函數(shù)有三個(gè),但最有效、最通用的是下面一種格式:SQLConnect(hdbc,szDSN,cbDSN,szUID,cbUID,szAnthStr,cbAuthStr)2.?dāng)嚅_數(shù)據(jù)源函數(shù)其格式如下:SQLDisconnect(hdbc)其中,參數(shù)hdbc是要斷開的連接句柄。函數(shù)的功能是斷開與數(shù)據(jù)源的連接,關(guān)閉與指定連接句柄相關(guān)的數(shù)據(jù)源。第五章數(shù)據(jù)庫互聯(lián)5.2.4數(shù)據(jù)源的連接與斷開

1/14/202317濟(jì)南大學(xué)管理學(xué)院信管系

1.直接執(zhí)行SOL語句的函數(shù)格式:SQLExecDirect(hstmt,szSqlStr,cbSqlStr)其中,參數(shù)hstm是一個(gè)有效的語句句柄;參數(shù)szSqlStr和cbSqlStr分別表示將要執(zhí)行的SQL語句的字符串及其長度。該函數(shù)能夠直接執(zhí)行一條準(zhǔn)備好的SQL語句,如果語句有參數(shù),則由函數(shù)帶參數(shù)調(diào)用,將參數(shù)傳遞給語句。例如,要以直接執(zhí)行的方法列出學(xué)生表中的信息,調(diào)用該函數(shù)的格式是:Retcode=SQLExecDirect(hdbc,“SELECT”*FROMS”,SQL_NTS)其中,SQL_NTS是ODBC的一個(gè)常數(shù),當(dāng)將要執(zhí)行的SQL語句的字符串是以NULL為結(jié)尾的字符串時(shí),可用它表示字符串長度。第五章數(shù)據(jù)庫互聯(lián)5.2.5SQL語句的執(zhí)行

1/14/202318濟(jì)南大學(xué)管理學(xué)院信管系

2、有準(zhǔn)備地執(zhí)行SOL語句的函數(shù)若SQL語句需要執(zhí)行幾次或者在執(zhí)行之前需要有關(guān)的結(jié)果集合準(zhǔn)備信息,則應(yīng)采用有準(zhǔn)備地執(zhí)行函數(shù)更佳。有準(zhǔn)備地執(zhí)行SQL語句需要兩個(gè)函數(shù):SQLPrepare和SQLExecute。應(yīng)用系統(tǒng)首先執(zhí)行SQLPrepare,為執(zhí)行一連串的SQL語句做好準(zhǔn)備,然后調(diào)用SQLExecute函數(shù)來執(zhí)行SQL語句。有準(zhǔn)備執(zhí)行的好處在于它可以是一次性準(zhǔn)備、多次執(zhí)行。(1)SQL語句預(yù)備函數(shù)格式:SQLPrepare(hstmt,szSqlStr,cbSqlStr)其中,參數(shù)hstmt是一個(gè)有效的語句句柄,參數(shù)szSqlStr和cbSqlStr分別表示將要執(zhí)行的SQL語句的字符串及其長度。(2)SQL語句執(zhí)行函數(shù)格式;SQLExecute(hstmt)其中參數(shù)hstmt是一個(gè)有效的語句句柄。第五章數(shù)據(jù)庫互聯(lián)1/14/202319濟(jì)南大學(xué)管理學(xué)院信管系當(dāng)執(zhí)行一個(gè)查詢時(shí),隱含地打開了一個(gè)光標(biāo)(cursor)。例如,函數(shù)調(diào)用:

SQLExecDirect(hstmt,”SELECT*FROMS”,SQL_NTS);將打開一個(gè)光標(biāo)。由于查詢返回一個(gè)行集合(即一個(gè)“結(jié)果集”),但是主語言不可能一次處理整個(gè)行集合,它必須是一次處理一行。光標(biāo)指示了當(dāng)前要處理行集的某一行。對于每一個(gè)存儲(chǔ)在一個(gè)臨時(shí)的存儲(chǔ)區(qū)里的結(jié)果集合,系統(tǒng)都自動(dòng)產(chǎn)生一個(gè)光標(biāo)。當(dāng)結(jié)果集合剛剛產(chǎn)生時(shí),光標(biāo)指問第一行數(shù)據(jù)之前。與光標(biāo)有關(guān)的ODBC函數(shù)主要有兩個(gè):SQLFetehSQLGetData。第五章數(shù)據(jù)庫互聯(lián)5.2.6查詢結(jié)果的獲取

1/14/202320濟(jì)南大學(xué)管理學(xué)院信管系在ODBC中,應(yīng)用程序不能直接存取數(shù)據(jù)庫,它必須通過管理器和數(shù)據(jù)庫交換信息。ODBC管理器負(fù)責(zé)安裝驅(qū)動(dòng)程序,將應(yīng)用程序的SQL語句及其他信息傳遞給驅(qū)動(dòng)程序,并幫助程序員跟蹤ODBC的函數(shù)調(diào)用,而驅(qū)動(dòng)程序則負(fù)責(zé)將運(yùn)行結(jié)果送回應(yīng)用程序。數(shù)據(jù)源負(fù)責(zé)將運(yùn)行結(jié)果送回應(yīng)用程序。數(shù)據(jù)源在使用之前必須通過ODBC管理器進(jìn)行登記和連接,啟動(dòng)ODBC管理器后,選取Add按鈕,根據(jù)自己的數(shù)據(jù)庫類型,選擇相應(yīng)的ODBC驅(qū)動(dòng)程序,然后輸入數(shù)據(jù)源名(DataSourceNAme)和數(shù)據(jù)庫文件名(DatabaseName),完成這些步驟后,應(yīng)用程序就能夠通過ODBC管理器的數(shù)據(jù)源直接操縱數(shù)據(jù)庫。第五章數(shù)據(jù)庫互聯(lián)5.2.7ODBC數(shù)據(jù)源的處理

1/14/202321濟(jì)南大學(xué)管理學(xué)院信管系ODBC管理器中各個(gè)頁面的用途:(1)用戶DSNODBC用戶數(shù)據(jù)源存貯了如何與指定數(shù)據(jù)庫提供者連接的信息,用戶數(shù)據(jù)源只對當(dāng)前用戶可見,且只能用于當(dāng)前機(jī)器。(2)系統(tǒng)DSNODBC系統(tǒng)數(shù)據(jù)源存貯了如何指定數(shù)據(jù)庫提供者連接的信息。系統(tǒng)數(shù)據(jù)源對當(dāng)前機(jī)器上的所有用戶都是可見的,包括NT服務(wù)。(3)文件DSNODBC文件數(shù)據(jù)源允許用戶連接數(shù)據(jù)提供者。文件DSN可以由安裝了相同驅(qū)動(dòng)程序的用戶共享。(4)驅(qū)動(dòng)程序這頁列出了本機(jī)上所有安裝的數(shù)據(jù)庫驅(qū)動(dòng)程序,其中列舉了每個(gè)驅(qū)動(dòng)程序的名稱,版本,提供商公司,驅(qū)動(dòng)程序文件名,以及安裝日期。(5)跟蹤ODBC跟蹤允許創(chuàng)建調(diào)用ODBC的日志,提供給技術(shù)人員查看。頁面中可設(shè)定日志的路徑和文件名。(6)連接池連接池允許應(yīng)用程序重用原來打開的的連接句柄。第五章數(shù)據(jù)庫互聯(lián)1/14/202322濟(jì)南大學(xué)管理學(xué)院信管系假設(shè)我們已經(jīng)通過Access創(chuàng)建了一個(gè)Sample.mdb文件(放在D:\MYDB\目錄下),里面包含了所有的表、索引和數(shù)據(jù)。那么以Access數(shù)據(jù)庫為例,創(chuàng)建一個(gè)用戶數(shù)據(jù)源的過程如下:(1)首先在用戶DSN這一頁,單擊添加。(2)選擇數(shù)據(jù)庫的驅(qū)動(dòng)程序,這里我們選擇MicrosoftAccessDriver(*.mdb)。然后單擊完成。(3)在數(shù)據(jù)源名(DSN)上指定一個(gè)名字(可以任意指定),以后在程序里面使用的DSN就是這個(gè)名字了。然后選擇數(shù)據(jù)庫,在彈出的窗口中找到D:\MYDB\Sample.mdb,先后按選擇和確定兩個(gè)按鈕。這里,有兩個(gè)復(fù)選框,可以規(guī)定數(shù)據(jù)庫以只讀或者獨(dú)占的方式打開。另外,也可以通過右下角的“網(wǎng)絡(luò)(N)…”按紐選擇網(wǎng)絡(luò)上另一臺(tái)機(jī)器上的數(shù)據(jù)庫。(4)選擇好數(shù)據(jù)庫后,確定退出。第五章數(shù)據(jù)庫互聯(lián)1/14/202323濟(jì)南大學(xué)管理學(xué)院信管系DAO是完全面向?qū)ο蟮摹AO對象模型是一個(gè)分層的樹型結(jié)構(gòu),該結(jié)構(gòu)由對象和集合構(gòu)成。在DAO編程中,用對象變量代表對象的引用。對象中包含屬性、方法和集合。集合包含同種類型的所有對象,每個(gè)集合又隸屬于更高一層的對象。DAO對象模型中,使用最重要和最頻繁的是Recordset對象,其主要有五種類型:表、動(dòng)態(tài)集、快照、動(dòng)態(tài)和僅向前類型。表類型的Recordset對象,是指當(dāng)前數(shù)據(jù)庫中的本地表或MicrosoftJet創(chuàng)建的外部數(shù)據(jù)庫。只能對單個(gè)的表打開表類型的記錄集,而不能對連接或聯(lián)合查詢打開。第五章數(shù)據(jù)庫互聯(lián)5.2.8DAO技術(shù)

1/14/202324濟(jì)南大學(xué)管理學(xué)院信管系動(dòng)態(tài)集類型的Recordset對象可以是本地的活著鏈接的表,也可以是返回的行查詢結(jié)果。動(dòng)態(tài)集類型具有一種與眾不同的特點(diǎn):可對不同數(shù)據(jù)庫進(jìn)行更新連接。動(dòng)態(tài)集和它的基本表可以互相更新??煺疹愋偷腞ecordset對象包含的數(shù)據(jù)是固定的,它反映了在產(chǎn)生快照的一瞬間數(shù)據(jù)庫的狀態(tài)。與動(dòng)態(tài)集類型和表類型的Recordset對象相比,快照的處理開銷較小。僅向前類型的Recordset對象,也稱向前滾動(dòng)快照或者僅向前快照,提供了快照的一部分功能,通常速度可以達(dá)到最快的速度。第五章數(shù)據(jù)庫互聯(lián)1/14/202325濟(jì)南大學(xué)管理學(xué)院信管系動(dòng)態(tài)類型的Recordset對象可以是從一個(gè)或幾個(gè)基本表中查詢到的結(jié)果集,對于返回行的查詢,可以在其中添加、修改或刪除記錄。另外,其他用戶對基本表的添加、刪除或修改操作也將出現(xiàn)在記錄集中。這種類型對應(yīng)于ODBC的動(dòng)態(tài)游標(biāo)。第五章數(shù)據(jù)庫互聯(lián)1/14/202326濟(jì)南大學(xué)管理學(xué)院信管系第三節(jié)JDBC原理與應(yīng)用JDBC(JavaDatabaseConnectivity)是JavaSoft公司提供的第一個(gè)支持Java語言的數(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ù)連接方式。Java開發(fā)人員只需面對簡單的數(shù)據(jù)庫界面而進(jìn)行操作,使得獨(dú)立于DBMS的Java應(yīng)用程序的開發(fā)工具和產(chǎn)品成為可能。JDBC與ODBC都是基于X/Open的SQL調(diào)用級接口,JDBC的設(shè)計(jì)在思想上沿襲了ODBC,同時(shí)在其主要抽象和SQLCLI實(shí)現(xiàn)上也沿襲了ODBC,這使得JDBC容易被接受。JDBC保持了ODBC的基本特性,也獨(dú)立于特定數(shù)據(jù)庫。第五章數(shù)據(jù)庫互聯(lián)1/14/202327濟(jì)南大學(xué)管理學(xué)院信管系5.3.1JDBC的體系結(jié)構(gòu)

JDBC的總體結(jié)構(gòu)與ODBC類似,由四個(gè)基本部件組成:即應(yīng)用程序接口、驅(qū)動(dòng)程序管理器、數(shù)據(jù)庫驅(qū)動(dòng)程序和數(shù)據(jù)源。JDBC體系結(jié)構(gòu)的層次如圖4所示。

第五章數(shù)據(jù)庫互聯(lián)JDBC的應(yīng)用程序JDBC應(yīng)用程序編程接口(API)JDBC驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序

驅(qū)動(dòng)程序驅(qū)動(dòng)程序······數(shù)據(jù)源1數(shù)據(jù)源2數(shù)據(jù)源3······1/14/202328濟(jì)南大學(xué)管理學(xué)院信管系JDBC的基本功能有:(1)建立與數(shù)據(jù)庫的連接;(2)發(fā)送SQL語句;(3)處理結(jié)果。JDBCAPI使用驅(qū)動(dòng)程序管理器和特定數(shù)據(jù)庫驅(qū)動(dòng)程序提供對不同種類數(shù)據(jù)庫的透明連接。JDBC的驅(qū)動(dòng)程序管理器可以保證使用正確的驅(qū)動(dòng)程序訪問每個(gè)數(shù)據(jù)源,而驅(qū)動(dòng)程序管理器能支持連接到多個(gè)不同種類的數(shù)據(jù)庫的多個(gè)并行驅(qū)動(dòng)程序。JDBC的驅(qū)動(dòng)程序把標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)換為網(wǎng)絡(luò)或數(shù)據(jù)庫協(xié)議,或者轉(zhuǎn)換成方便數(shù)據(jù)庫通信的數(shù)據(jù)庫的庫API調(diào)用。這個(gè)轉(zhuǎn)換層使JDBC應(yīng)用程序具備數(shù)據(jù)庫獨(dú)立性。JDBC的驅(qū)動(dòng)程序四類:即JDBC-ODBC網(wǎng)橋、本機(jī)APIJava驅(qū)動(dòng)程序、網(wǎng)絡(luò)協(xié)議Java驅(qū)動(dòng)程序和數(shù)據(jù)庫協(xié)議Java驅(qū)動(dòng)程序。第五章數(shù)據(jù)庫互聯(lián)1/14/202329濟(jì)南大學(xué)管理學(xué)院信管系

1類型1:JDBC-ODBC網(wǎng)橋(Bridge)

第五章數(shù)據(jù)庫互聯(lián)應(yīng)用程序類型1:JDBC驅(qū)動(dòng)程序本地JDBC-ODBC網(wǎng)橋本地ODBC驅(qū)動(dòng)程序

數(shù)據(jù)源網(wǎng)橋驅(qū)動(dòng)程序充當(dāng)JDBC和另一個(gè)數(shù)據(jù)庫的連接機(jī)制,比如ODBC。JDBC-ODBC橋用最標(biāo)準(zhǔn)的ODBC驅(qū)動(dòng)程序提供JDBC的訪問。這個(gè)驅(qū)動(dòng)程序包含在Java2SDK的sun.jdbc.odbc軟件包中。最后,JDBC-ODBC橋需要在每個(gè)使用類型1驅(qū)動(dòng)程序的客戶機(jī)上安裝并配置本機(jī)ODBC庫、驅(qū)動(dòng)程序以及必要的支持文件。這樣的要求會(huì)給許多應(yīng)用程序帶來很大的限制。1/14/202330濟(jì)南大學(xué)管理學(xué)院信管系

2類型2:本機(jī)APIJava驅(qū)動(dòng)程序

本機(jī)APIJava驅(qū)動(dòng)程序使用JavaNativeInterface(INI)調(diào)用本機(jī)數(shù)據(jù)庫API。類型2驅(qū)動(dòng)程序通常要比類型1的速度要快。與類型1相似,本機(jī)APIJava驅(qū)動(dòng)程序同樣需要在客戶機(jī)上安裝并配置本機(jī)數(shù)據(jù)庫API。第五章數(shù)據(jù)庫互聯(lián)應(yīng)用程序類型2:JDBC驅(qū)動(dòng)程序本機(jī)數(shù)據(jù)庫API本機(jī)數(shù)據(jù)源1/14/202331濟(jì)南大學(xué)管理學(xué)院信管系

3類型3:網(wǎng)絡(luò)協(xié)議Java驅(qū)動(dòng)程序第五章數(shù)據(jù)庫互聯(lián)應(yīng)用程序類型3:JDBC驅(qū)動(dòng)程序JDBC中間件

數(shù)據(jù)源網(wǎng)絡(luò)協(xié)議該驅(qū)動(dòng)程序是純Java驅(qū)動(dòng)程序,它使用專有的網(wǎng)絡(luò)協(xié)議同服務(wù)器上的JDBC中間件進(jìn)行通信。然后再由中間件把網(wǎng)絡(luò)協(xié)議轉(zhuǎn)換成特定數(shù)據(jù)庫的函數(shù)調(diào)用。類型3的驅(qū)動(dòng)程序是最靈活的JDBC解決方案,因?yàn)樗鼈儾恍枰诳蛻魴C(jī)上具備本機(jī)數(shù)據(jù)庫API,而且它們還可以在后端連接到許多不同數(shù)據(jù)庫上。類型3的驅(qū)動(dòng)程序可以在Internet上進(jìn)行部署,無需在客戶機(jī)上安裝。1/14/202332濟(jì)南大學(xué)管理學(xué)院信管系

4類型4:數(shù)據(jù)庫協(xié)議Java驅(qū)動(dòng)程序第五章數(shù)據(jù)庫互聯(lián)該驅(qū)動(dòng)程序也是純Java的驅(qū)動(dòng)程序,它執(zhí)行專有的數(shù)據(jù)庫協(xié)議與數(shù)據(jù)庫進(jìn)行直接的通信。同類型3,類型4的驅(qū)動(dòng)程序也不需要本機(jī)數(shù)據(jù)庫API,而且可以在Internet上對它進(jìn)行部署,無需在客戶端上安裝。類型4的驅(qū)動(dòng)程序的一個(gè)缺陷是它們與特定數(shù)據(jù)庫有關(guān)。由于數(shù)據(jù)庫協(xié)議Java驅(qū)動(dòng)程序直接同數(shù)據(jù)庫引擎通信,而不是通過中間件或者本機(jī)數(shù)據(jù)庫API,因此它們是可用的最快JDBC驅(qū)動(dòng)程序。應(yīng)用程序類型3:JDBC驅(qū)動(dòng)程序數(shù)據(jù)源數(shù)據(jù)庫協(xié)議1/14/202333濟(jì)南大學(xué)管理學(xué)院信管系

1JDBCAPI

JDBCAPI被描述成為一組抽象的Java接口,通過JDBCAPI,應(yīng)用程序可以對某個(gè)數(shù)據(jù)庫進(jìn)行打開連接,執(zhí)行SQL語句并且處理結(jié)果。JDBCAPI中最重要的接口是:java.sql.DriverManager:處理驅(qū)動(dòng)程序的調(diào)入并且對產(chǎn)生新的數(shù)據(jù)庫連接提供支持。java.sql.Connection:代表對特定數(shù)據(jù)庫的連接。java.sql.Statement:代表一個(gè)特定的容器,來對一個(gè)特定的數(shù)據(jù)庫執(zhí)行SQL語句。java.sql.ResultSet:控制對一個(gè)特定語句的行數(shù)據(jù)的存取。第五章數(shù)據(jù)庫互聯(lián)5.3.2JDBC的接口

1/14/202334濟(jì)南大學(xué)管理學(xué)院信管系2JDBCDriverAPI大部分JDBC驅(qū)動(dòng)只需要完成這些JDBCAPI所定義的抽象類就可以了。特別地,所有的JDBC驅(qū)動(dòng)必須提供對java.sql.Connection,java.sql.Statement,java.sql.PreparedStatement和

java.sql.ResultSet的實(shí)現(xiàn)。如果目標(biāo)DBMS提供有OUT參數(shù)的內(nèi)嵌過程,那么還必須提供java.sql.CallableStatement

接口的實(shí)現(xiàn)。每個(gè)數(shù)據(jù)庫JDBC驅(qū)動(dòng)必須提供一個(gè)相應(yīng)的驅(qū)動(dòng)類,它由java.sql.Driver派生,通過這個(gè)驅(qū)動(dòng)類,系統(tǒng)可以使用java.sql.DriverManager來管理相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)。第五章數(shù)據(jù)庫互聯(lián)1/14/202335濟(jì)南大學(xué)管理學(xué)院信管系

在兩層模型中,一個(gè)JavaApplet或者一個(gè)Java應(yīng)用程序直接同數(shù)據(jù)庫連接。這就需要能直接與被訪問的數(shù)據(jù)庫進(jìn)行連接的JDBC驅(qū)動(dòng)程序。用戶的SQL語句被傳送給數(shù)據(jù)庫,而這些語句執(zhí)行的結(jié)果將被傳回給用戶。數(shù)據(jù)庫可以在同一機(jī)器上,也可以在另一機(jī)器上通過網(wǎng)絡(luò)進(jìn)行連接。第五章數(shù)據(jù)庫互聯(lián)5.3.3JDBC訪問數(shù)據(jù)庫的模式

JavaAppletJava應(yīng)用程序JDBC驅(qū)動(dòng)程序數(shù)據(jù)源1/14/202336濟(jì)南大學(xué)管理學(xué)院信管系在三層模型中,命令將被發(fā)送到服務(wù)的“中間層”,而“中間層”將SQL語句發(fā)送到數(shù)據(jù)庫。數(shù)據(jù)庫處理SQL語句將結(jié)果返回“中間層”,然后“中間層”將它們返回用戶。MIS管理員將發(fā)現(xiàn)三層模型很有吸引力,因?yàn)椤爸虚g層”可以進(jìn)行對訪問的控制并能協(xié)同數(shù)據(jù)庫進(jìn)行更新,另一個(gè)優(yōu)勢就是如果有一個(gè)“中間層”用戶就可以使用一個(gè)易用的高層的API,這個(gè)API可以由“中間層”進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換成底層的調(diào)用。第五章數(shù)據(jù)庫互聯(lián)JavaAppletJava應(yīng)用程序JDBC驅(qū)動(dòng)程序數(shù)據(jù)源數(shù)據(jù)庫訪問中間層1/14/202337濟(jì)南大學(xué)管理學(xué)院信管系

1建立連接JavaSQL允許對多種數(shù)據(jù)庫進(jìn)行操作。每一種數(shù)據(jù)庫的驅(qū)動(dòng)程序完成java.sql.Driver接口。DriverManager將試圖安裝它找到的任何驅(qū)動(dòng)程序,然后發(fā)出連接請求,它輪流請求每個(gè)驅(qū)動(dòng)器來連接目標(biāo)URL。當(dāng)一個(gè)驅(qū)動(dòng)類被裝載后,它將創(chuàng)建該類的一個(gè)實(shí)例,并用DriveManager將它注冊。因此用戶可以通過代碼ClassforName(”Driver”);裝載并注冊一個(gè)驅(qū)動(dòng)器。如:Class.for.Name(”sun.jdbc.odbc.JdbcOdbcDriver”);一次連接對話包括被執(zhí)行的SQL語句和從連接上返回的結(jié)果。第五章數(shù)據(jù)庫互聯(lián)5.3.4JDBC數(shù)據(jù)庫應(yīng)用程序的編寫

1/14/202338濟(jì)南大學(xué)管理學(xué)院信管系

2.發(fā)送SOL語句

連接一旦建立,就可用來向它所涉及的數(shù)據(jù)庫傳送SQL語句。JDBC提供了三個(gè)類來發(fā)送SQL語句,這三個(gè)類和創(chuàng)建它們的方法分別是:(l)Statement類它的對象由createStatement方法創(chuàng)建。主要用于對一特定的數(shù)據(jù)庫發(fā)送簡單的SQL語句。如;Statementsqlstr=con.createStatement(”select*fromstudent”);第五章數(shù)據(jù)庫互聯(lián)1/14/202339濟(jì)南大學(xué)管理學(xué)院信管系(2)PraparedStatement類其對象由Preparedstatement方法創(chuàng)建。PreparedStatement類允許在SQL語句中使用輸入?yún)?shù)。PreparedStatement類派生出了Statement類,因此它包括Statement類的方法。PreparedStatement對象要被預(yù)先創(chuàng)建并且被存儲(chǔ)起來以備將來使用,因此在多次執(zhí)行一條SQL語句時(shí),它比Statement效率高。第五章數(shù)據(jù)庫互聯(lián)1/14/202340濟(jì)南大學(xué)管理學(xué)院信管系(3)CallableStatement類。CallableStatement類是ProparedStatement類的子類。它的對象用prepareCall創(chuàng)建。CallableStatement對象用于執(zhí)行SQL的存儲(chǔ)過程(storedptocedures)。該對象從PreparedStatement中繼承了處理輸入?yún)?shù)的方法,同時(shí)它又增加了處理輸入和輸出參數(shù)的方法。第五章數(shù)據(jù)庫互聯(lián)1/14/202341濟(jì)南大學(xué)管理學(xué)院信管系(4)檢索結(jié)果SQL語句發(fā)送以后,返回的結(jié)果通常存放在一個(gè)ResultSet類的對象中。ResultSet可以看做是一個(gè)表,這個(gè)表包含查詢返回的列名和相應(yīng)的值。ResultSet對象中維持了一個(gè)指向當(dāng)前行的指針,通過一系列的get方法,可以檢索當(dāng)前行的各個(gè)列。(5)關(guān)閉連接在Statement、PraparedStatement和CallableStatement對象使用完畢后,應(yīng)當(dāng)關(guān)閉。同時(shí)Connection對象也應(yīng)該關(guān)閉。第五章數(shù)據(jù)庫互聯(lián)1/14/202342濟(jì)南大學(xué)管理學(xué)院信管系下面是一個(gè)使用JDBC的簡單例子。try{Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver”)lConnectioncon=DriveManager.getConnection(”jdbc:odbc:mydb”,””,””);Java.sql.Statementsqlcmd=con.createStatement();Resultr=sqlcmd.executeQuery(”Selecta,bfrommytable”);While(r.next()){inti=r.getInteger(1);Strings=r.getVarCHar(2);System.out.println(”a=”+i+”b”+s);}Sqlcmd.close()}catch(Exceptione){System.out.println(e.getMessage());}……第五章數(shù)據(jù)庫互聯(lián)1/14/202343濟(jì)南大學(xué)管理學(xué)院信管系(1)ODBC并不適合在Java中直接使用。ODBC是一個(gè)C語言實(shí)現(xiàn)的API,從Java程序調(diào)用本地的C程序會(huì)帶來一系列類似安全性、完整性、健壯性的缺點(diǎn)。(2)實(shí)踐證明,將C代碼的ODBC精確翻譯成JavaAPI寫的ODBC的效果并不令人滿意。(3)ODBC將簡單特性和復(fù)雜特性混雜在一起,學(xué)習(xí)起來比較難。而JDBC建構(gòu)在ODBC的基礎(chǔ)上,不僅保持了簡單事物的簡單性,而且又允許復(fù)雜的特性,學(xué)習(xí)起來非常容易。第五章數(shù)據(jù)庫互聯(lián)5.3.6JDBC與ODBC的比較

1/14/202344濟(jì)南大學(xué)管理學(xué)院信管系(4)JDBC對于純Java方案來說是必須的。使用ODBC時(shí)必須在每一臺(tái)客戶機(jī)上安裝ODBC驅(qū)動(dòng)器和驅(qū)動(dòng)管理器。JDBC驅(qū)動(dòng)器則是完全用Java語言實(shí)現(xiàn)的,代碼可以自動(dòng)的下載和安裝,較好地保證了它的安全性,且JDBC將適應(yīng)任何Java平臺(tái)??傊?,JDBCAPI保持了ODBC的基本設(shè)計(jì)特征,是體現(xiàn)SQL最基本抽象概念的、最直接的Java接口。實(shí)際上,ODBC和JDBC都是基于X/OPENSQL的調(diào)用級接口。它們的最大不同是JDBC是基于Java的風(fēng)格和優(yōu)點(diǎn),并強(qiáng)化了Java的風(fēng)格和優(yōu)點(diǎn)。第五章數(shù)據(jù)庫互聯(lián)5.3.6JDBC與ODBC的比較

1/14/202345濟(jì)南大學(xué)管理學(xué)院信管系第四節(jié)OLEDB和ADO第五章數(shù)據(jù)庫互聯(lián)早期的程序員在程序中要連接數(shù)據(jù)庫是非常困難的,每種DBMS產(chǎn)生的數(shù)據(jù)庫文件的格式都不一樣,程序員要對他們訪問的DBMS的底層API有相當(dāng)程度的了解,通過API來訪問特定的DBMS。這就產(chǎn)生了一個(gè)問題,當(dāng)使用的DBMS改變后,或者用戶習(xí)慣使用的DBMS與開發(fā)程序使用DBMS的不符合時(shí),應(yīng)用軟件便無法正常訪問DBMS。因此,能處理各種數(shù)據(jù)文件的API便產(chǎn)生了,這就是大家都知道的ODBC。

5.4.1數(shù)據(jù)訪問接口的發(fā)展歷程1/14/202346濟(jì)南大學(xué)管理學(xué)院信管系第五章數(shù)據(jù)庫互聯(lián)ODBC是通用API的早期產(chǎn)物,是基于結(jié)構(gòu)查詢語言(sql)的,以此作為訪問數(shù)據(jù)的標(biāo)準(zhǔn)。這時(shí)大多數(shù)DBMS提供了面向ODBC的驅(qū)動(dòng)程序,遵從了這個(gè)標(biāo)準(zhǔn)的DBMS被稱為ODBC兼容的DBMS。包括Access,MS-SQLServer,Oracle,Informix等。但是ODBC并不完美,他雖然統(tǒng)一了對多種常用DBMS的訪問,但是這個(gè)“訪問”的過程是非常困難的,他仍然存在大量的低級調(diào)用,程序員必須將大量的精力放在底層的數(shù)據(jù)通信中,這是因?yàn)镺DBC是面向C++的,而不能專注于所要處理的數(shù)據(jù)。為了改善這種及其不友好的接口,使得在程序開發(fā)中,數(shù)據(jù)庫訪問的工作更加容易,微軟提出里一個(gè)解決方案:DAO(DataAccessObjects),是第一個(gè)面向?qū)ο蟮慕涌凇?/p>

1/14/202347濟(jì)南大學(xué)管理學(xué)院信管系第五章數(shù)據(jù)庫互聯(lián)DAO最適用于單系統(tǒng)應(yīng)用程序或小范圍本地分布使用。于是為了訪問遠(yuǎn)程DBMS,更好地實(shí)現(xiàn)數(shù)據(jù)共享,或數(shù)據(jù)的交互操作,這時(shí)產(chǎn)生了一個(gè)新的數(shù)據(jù)庫訪問接口:RDO(RemoteDataObjects遠(yuǎn)程數(shù)據(jù)對象),當(dāng)然,RDO也是一個(gè)面向?qū)ο蟮慕涌凇DO已被證明是許多SQLServer、Oracle以及其他大型關(guān)系數(shù)據(jù)庫開發(fā)者經(jīng)常選用的最佳接口。1/14/202348濟(jì)南大學(xué)管理學(xué)院信管系隨著需求的發(fā)展,又引出了新問題:以上各個(gè)數(shù)據(jù)庫接口都需要數(shù)據(jù)以SQL的格式存儲(chǔ),即:要求訪問的數(shù)據(jù)文件都必須是關(guān)系類型的庫文件。而在平時(shí),我們經(jīng)常要處理一些非關(guān)系數(shù)據(jù)源,如Excel電子表格,文本文件,XML文件等。針對這個(gè)問題,微軟提出了UDA(UniversalDataAccess,統(tǒng)一數(shù)據(jù)訪問技術(shù)),為非關(guān)系型和關(guān)系型數(shù)據(jù)源訪問提供了統(tǒng)一的、獨(dú)立與開發(fā)工具和開發(fā)語言的訪問接口,為企業(yè)級Internet應(yīng)用提供了數(shù)據(jù)接口標(biāo)準(zhǔn)。UDA技術(shù)包括兩層軟件接口:OLEDB和ADO(ActiveXDataObject)。第五章數(shù)據(jù)庫互聯(lián)1/14/202349濟(jì)南大學(xué)管理學(xué)院信管系圖5.13UDA的層次結(jié)構(gòu)圖第五章數(shù)據(jù)庫互聯(lián)OLEDB提供底層軟件接口,可在C/C++語言中直接應(yīng)用。定義了一組COM接口,這組接口封裝了各種數(shù)據(jù)系統(tǒng)的訪問操作,為數(shù)據(jù)使用方和數(shù)據(jù)提供方建立了標(biāo)準(zhǔn)。ADO是應(yīng)用層(高層)編程接口,通過OLEDB提供的COM接口訪問數(shù)據(jù),適合于各種C/S應(yīng)用系統(tǒng)和基于Web的應(yīng)用,尤其是在一些腳本語言中訪問數(shù)據(jù)庫是其主要優(yōu)勢。1/14/202350濟(jì)南大學(xué)管理學(xué)院信管系第四節(jié)OLEDB和ADO第五章數(shù)據(jù)庫互聯(lián)COM是由Microsoft公司提出的一個(gè)說明如何建立可動(dòng)態(tài)互變組件的規(guī)范,它是一種平臺(tái)獨(dú)立的、分布式的、面向?qū)ο蟮?、可用于?chuàng)建交互的二進(jìn)制軟件組件的系統(tǒng)。COM提供了為保證能夠互操作,客戶和組件應(yīng)遵循的一些標(biāo)準(zhǔn);它定義了對象實(shí)現(xiàn)功能的方式、對象的生命周期;它是建立ActiveX和OLEDB的“對象模型”。COM不是一種計(jì)算機(jī)語言,而是一種技術(shù)標(biāo)準(zhǔn)。它并不是像Win32API那樣的一個(gè)函數(shù)集,也沒有提供類似于MoveWindows這樣的服務(wù)。相反,COM更主要的是一種編寫能夠按面向?qū)ο驛PI形式提供服務(wù)的組件的方法。5.4.2COM簡介1/14/202351濟(jì)南大學(xué)管理學(xué)院信管系

1COM的功能●提供了由一組相關(guān)的函數(shù)組成的接口,客戶可以使用該接口從服務(wù)器獲得服務(wù)?!窠柚贑OM提供的體系結(jié)構(gòu),對象可以支持多個(gè)接口??蛻羰褂肣ueryInterface能夠獲得接口指針?!裉峁┑囊糜?jì)數(shù)機(jī)制能確保服務(wù)器在客戶運(yùn)行期間獲得服務(wù)?!衿浯鎯?chǔ)管理實(shí)現(xiàn)了由客戶釋放服務(wù)器分配的內(nèi)存資源的功能。●提供了報(bào)告擴(kuò)展錯(cuò)誤和狀態(tài)信息的模塊。●提供了對象可以透明地在進(jìn)程之內(nèi)、進(jìn)程之間或通過網(wǎng)絡(luò)進(jìn)行通信的機(jī)制。●提供了對實(shí)現(xiàn)某個(gè)服務(wù)的特殊應(yīng)用或DLL進(jìn)行動(dòng)態(tài)識別并載入運(yùn)行系統(tǒng)的機(jī)制。●提供了動(dòng)態(tài)創(chuàng)建對象實(shí)例的機(jī)制。第五章數(shù)據(jù)庫互聯(lián)1/14/202352濟(jì)南大學(xué)管理學(xué)院信管系

2COM組件COM組件是遵循COM規(guī)范編寫、以Win32動(dòng)態(tài)鏈接庫(DLL)或可執(zhí)行文件(EXE)形式發(fā)布的可執(zhí)行二進(jìn)制代碼,能夠滿足對組件架構(gòu)的所有需求。①COM組件并不是專為一種Windows平臺(tái)而設(shè)計(jì)的,它既可以被嵌入動(dòng)態(tài)Web頁面,又可以在LAN或桌面環(huán)境的VB和VC等應(yīng)用中使用。②COM組件之間是彼此獨(dú)立的。當(dāng)應(yīng)用需求發(fā)生變更時(shí),可能需要更換中間層的個(gè)別COM組件,但這并不會(huì)影響其他組件的繼續(xù)使用。③COM組件具有若干對外接口(屬性和方法),根據(jù)不同的應(yīng)用需求,可以有選擇地使用不同的接口。即使某些管腳被"廢棄",COM組件本身仍然可繼續(xù)使用。④同一COM組件可以在不同的應(yīng)用環(huán)境中重復(fù)使用。第五章數(shù)據(jù)庫互聯(lián)1/14/202353濟(jì)南大學(xué)管理學(xué)院信管系

3COM庫COM還具有一個(gè)被稱作是COM庫(COMlibrary)的API,為所有客戶及組件提供非常有用的組件管理服務(wù)。當(dāng)在非Windows系統(tǒng)下開發(fā)COM風(fēng)格的組件時(shí),要實(shí)現(xiàn)此API中的大多數(shù)函數(shù)并不是一件太難的事情。COM庫可以保證對所有組件大多數(shù)重要的操作都可以按相同的方式完成。同時(shí),COM庫也可以節(jié)省開發(fā)人員花在他們自己組件及客戶的實(shí)現(xiàn)上的時(shí)間。COM庫中的大多數(shù)代碼均是可以支持分布式或網(wǎng)絡(luò)化的組件。Windows系統(tǒng)上分布式COM(DCOM)的實(shí)現(xiàn)中提供了一些與網(wǎng)絡(luò)上其他組件通信所需的代碼。這節(jié)省了開發(fā)人員的編程時(shí)間,而且可使他們無需了解如何進(jìn)行網(wǎng)絡(luò)編程。

第五章數(shù)據(jù)庫互聯(lián)1/14/202354濟(jì)南大學(xué)管理學(xué)院信管系

4COM的接口接口是COM組件與客戶打交道的唯一辦法。所謂的接口是提供了兩個(gè)對象之間的一種連接。對于COM來說,接口是一種包含一個(gè)函數(shù)指針數(shù)組的內(nèi)存結(jié)構(gòu)。每個(gè)數(shù)組元素包含的是一個(gè)組件所實(shí)現(xiàn)的函數(shù)的地址。一旦定義了接口,該接口必須保持不變。如果需要改變接口,就必須重新定義一個(gè)新的接口。對于客戶來說,一個(gè)組件就是一個(gè)接口集。所有的COM接口都是從特定的接口IUnknown中派生的。IUnkown接口提供了三個(gè)成員函數(shù)(即三個(gè)方法):QueryInterface、AddRef和Release,因此所有的COM接口都能使用這三個(gè)函數(shù)。下面是IUnkown接口的描述:第五章數(shù)據(jù)庫互聯(lián)interfaceIUnknown{virtualHRESULT__stdcallQueryInterface(constIIDiid,void**ppv)=0;virtualULONG__stdcallAddRef()=0;virtualULONG__stdcallRelease()=0;};1/14/202355濟(jì)南大學(xué)管理學(xué)院信管系

5實(shí)例化對象

客戶程序需要實(shí)例化類的對象。COM庫提供了一個(gè)實(shí)例化對象的函數(shù)CoCreateInstance,它的作用就是按照查詢的組件和接口到系統(tǒng)中去尋找其所在的文件(一般總是EXE或者DLL文件),然后創(chuàng)建該組件并查詢其接口。一般來說,實(shí)例化對象函數(shù)的具體實(shí)現(xiàn)是與系統(tǒng)相關(guān)的,以后將會(huì)提到,在Windows系統(tǒng)中,將查詢注冊表已確定某個(gè)特定的組件在哪個(gè)文件中。該函數(shù)可以創(chuàng)建該組件的實(shí)例并且獲取其IUnknown*。CoCreateInstance函數(shù)的格式描述如下:HRESULT__stdcallCoCreateInstance(constCLSID&clsid,Iunknown*pIUnknownOuter,DWORDdwClsContext,constIID&iid,void**ppv);實(shí)例見書。第五章數(shù)據(jù)庫互聯(lián)1/14/202356濟(jì)南大學(xué)管理學(xué)院信管系

6接口協(xié)商

COM類可以支持多接口的事實(shí)意味著必須有一種機(jī)制使正在引用一個(gè)類接口的客戶能夠得到另外一個(gè)接口的引用。通過一個(gè)稱為接口協(xié)商的過程,可以獲得另外接口指針。該過程是利用QueryInterface方法實(shí)現(xiàn)的。QueryInterface方法允許COM對象就它們是否支持特定接口進(jìn)行查詢。如果被查詢的對象不支持有問題的接口,則更替接口的指針后返回。QueryInterface方法的第一個(gè)參數(shù)用來傳入所請求接口的ID,第二個(gè)參數(shù)用來把該接口的指針傳出。在不支持被請求接口的情況下,該方法返回的HRESULT將指出該請求失敗。第五章數(shù)據(jù)庫互聯(lián)1/14/202357濟(jì)南大學(xué)管理學(xué)院信管系

7引用計(jì)數(shù)的實(shí)現(xiàn)

對象使用完畢后,COM并不會(huì)自動(dòng)將其從內(nèi)存中移去,因此編程人員必須手工完成。要判斷某個(gè)對象是否從內(nèi)存移去,主要根據(jù)引用計(jì)數(shù)來決定。COM通過IUnkown的AddRef和Release函數(shù)來管理對象接口的引用計(jì)數(shù)。方法AddRef用來使對象的引用計(jì)數(shù)器加1。方法Release則用來給對象的引用計(jì)數(shù)器減1,如果該引用計(jì)數(shù)器的值為0,則要將該對象從內(nèi)存移去。實(shí)例見書。第五章數(shù)據(jù)庫互聯(lián)1/14/202358濟(jì)南大學(xué)管理學(xué)院信管系

8COM應(yīng)用程序編程步驟(1)初始化COM運(yùn)行時(shí)系統(tǒng)。完成此功能的COMAPI調(diào)用是ConInitialize(或ConInitializeEx)。(2)獲得初始接口的引用(或指針)。在VC++中,可以通過調(diào)用CoCreateInstance或CoCreateInstanceEx來獲得接口指針。在VB中可用操作符New或調(diào)用CreateObject來實(shí)現(xiàn)。(3)通過接口指針可以調(diào)用該接口的方法。(4)如果要調(diào)用其他接口的方法,則在VC++中,通過接口指針調(diào)用QueryInterface來實(shí)現(xiàn)。在VB中,可通過執(zhí)行一個(gè)Set操作來實(shí)現(xiàn)。(5)在VC++中,當(dāng)不再使用接口指針時(shí),要調(diào)用Release將其釋放。在VB中,引用在其作用域外會(huì)自動(dòng)釋放。(6)當(dāng)用完COM時(shí),需要調(diào)用CoUninitialize來取消COM初始化。VB和MFC類庫都可以自動(dòng)實(shí)現(xiàn)這一步。第五章數(shù)據(jù)庫互聯(lián)1/14/202359濟(jì)南大學(xué)管理學(xué)院信管系1OLEDB的基本概念OLEDB是基于COM接口的數(shù)據(jù)庫開發(fā)技術(shù),是一種統(tǒng)一的高性能數(shù)據(jù)訪問接口,能訪問各種DBMS和非DBMS數(shù)據(jù)源。DBMS數(shù)據(jù)源包括主機(jī)數(shù)據(jù)庫(如IMS和DB2)、服務(wù)器數(shù)據(jù)庫(如Oracle和SQLSereer)以及桌面數(shù)據(jù)庫(如MicrosoftAccess);非DBMS數(shù)據(jù)源包括存放在Windows和UNIX文件系統(tǒng)中的信息、電子郵件、電子表格和文件系統(tǒng)存儲(chǔ)、文本、圖形、地理數(shù)據(jù)和定制的商業(yè)對象。

從用戶的角度看,OLEDB為用戶提供了一種統(tǒng)一的方法來訪問所有不同種類的數(shù)據(jù)源(如圖5.14),而不用考慮數(shù)據(jù)是存儲(chǔ)在一個(gè)數(shù)據(jù)庫系統(tǒng)還是其他的信息源中,也不用考慮數(shù)據(jù)的格式及類型。第五章數(shù)據(jù)庫互聯(lián)5.4.3OLEDB的基本概念和編程基礎(chǔ)1/14/202360濟(jì)南大學(xué)管理學(xué)院信管系

2基本的OLEDB結(jié)構(gòu)OLEDB結(jié)構(gòu)由客戶和提供者組成??蛻粽埱髷?shù)據(jù),而提供者對請求作出響應(yīng),即將數(shù)據(jù)以表格式返回給客戶。從技術(shù)上說,客戶是指任何一些使用OLEDB接口的系統(tǒng)或應(yīng)用程序的代碼,這就包括了OLEDB構(gòu)件本身。提供者是指任何提供OLEDB接口的軟件構(gòu)件第五章數(shù)據(jù)庫互聯(lián)有兩種類型的OLEDB提供者:●數(shù)據(jù)提供者擁有數(shù)據(jù)并把這些數(shù)據(jù)排列成表的形式作為行集(行集僅僅是表中所陳列數(shù)據(jù)的摘要)。一些好的數(shù)據(jù)提供者的例子有關(guān)系型DBMS、存儲(chǔ)管理器、電子數(shù)據(jù)表以及ISAM數(shù)據(jù)庫等?!穹?wù)提供者指的是這樣一些OLEDB構(gòu)件,它們不擁有數(shù)據(jù),但可以通過利用OLEDB接口處理數(shù)據(jù)的方法提供一些服務(wù)。從某種程度上說,一個(gè)服務(wù)構(gòu)件既是客戶,同時(shí)也是提供者。1/14/202361濟(jì)南大學(xué)管理學(xué)院信管系第五章數(shù)據(jù)庫互聯(lián)會(huì)話(session)數(shù)據(jù)源(sourse)會(huì)話(session)行集(rowset)命令(command)命令(command)事務(wù)(transaction)錯(cuò)誤(error)行集(rowset)索引(index)圖5.15OLEDB對象模型圖3OLEDB的對象模型1/14/202362濟(jì)南大學(xué)管理學(xué)院信管系

3OLEDB的對象模型OLEDB還定義了以下COM對象:(1)枚舉器:搜索有關(guān)在這個(gè)系統(tǒng)中存在的數(shù)據(jù)源。(2)數(shù)據(jù)源:一個(gè)數(shù)據(jù)源對象對應(yīng)一個(gè)數(shù)據(jù)提供者,負(fù)責(zé)管理用戶權(quán)限、建立與數(shù)據(jù)源的連接等初始操作。(3)會(huì)話:會(huì)話對象代表了和一個(gè)數(shù)據(jù)庫的連接,負(fù)責(zé)管理數(shù)據(jù)源于查詢和數(shù)據(jù)獲取間的交互。(4)事務(wù):用于管理數(shù)據(jù)庫的事務(wù),保證數(shù)據(jù)庫的安全。(5)命令:命令對象是用來執(zhí)行文本命令的,如查詢命令、修改命令等。(6)行集:以表格式提供數(shù)據(jù),是數(shù)據(jù)的抽象表示。(7)錯(cuò)誤:錯(cuò)誤對象中包含一些與錯(cuò)誤相關(guān)的附加信息,包括某一個(gè)可選的自定義錯(cuò)誤對象。(8)索引:索引對象是行集對象的一個(gè)特例,它創(chuàng)建一個(gè)使用相關(guān)索引的行集,允許對數(shù)據(jù)源行集進(jìn)行順序訪問。第五章數(shù)據(jù)庫互聯(lián)1/14/202363濟(jì)南大學(xué)管理學(xué)院信管系

4OLEDB數(shù)據(jù)庫應(yīng)用程序的結(jié)構(gòu)OLEDB數(shù)據(jù)庫應(yīng)用程序的結(jié)構(gòu)由數(shù)據(jù)應(yīng)用程序、數(shù)據(jù)提供程序和服務(wù)提供程序組成。(1)數(shù)據(jù)應(yīng)用程序(消費(fèi)者)數(shù)據(jù)應(yīng)用程序(消費(fèi)者)是指任何一些使用OLEDB接口的系統(tǒng)或應(yīng)用程序的代碼,這就包括了OLEDB構(gòu)件本身。數(shù)據(jù)應(yīng)用程序通過OLEDB接口對數(shù)據(jù)提供程序中的數(shù)據(jù)進(jìn)行訪問和控制。(2)數(shù)據(jù)提供程序數(shù)據(jù)提供程序是指任何提供OLEDB接口的軟件構(gòu)件,它是擁有自己的數(shù)據(jù)并以表格形式顯示數(shù)據(jù)的應(yīng)用程序。數(shù)據(jù)提供程序是OLEDB結(jié)構(gòu)中的關(guān)鍵組成部分,OLEDB數(shù)據(jù)庫應(yīng)用程序要能夠訪問所有關(guān)系型和非關(guān)系型的數(shù)據(jù)源,而每個(gè)數(shù)據(jù)源要有自己的數(shù)據(jù)提供程序支持,這也類似于ODBC中的數(shù)據(jù)驅(qū)動(dòng)程序。第五章數(shù)據(jù)庫互聯(lián)1/14/202364濟(jì)南大學(xué)管理學(xué)院信管系

(3)服務(wù)提供程序服務(wù)提供者指的是這樣一些OLEDB構(gòu)件,它們不擁有數(shù)據(jù),但可以通過OLEDB接口來訪問數(shù)據(jù)提供程序中的數(shù)據(jù),然后,服務(wù)提供程序通過暴露數(shù)據(jù)提供接口時(shí)的數(shù)據(jù)對使用者有效。從某種程度上說,一個(gè)服務(wù)構(gòu)件既是客戶,同時(shí)也是提供者。例如,一個(gè)異構(gòu)查詢處理器就是一個(gè)服務(wù)構(gòu)件。在某種情況下,當(dāng)用戶想把數(shù)據(jù)從表聯(lián)結(jié)到兩個(gè)不同的數(shù)據(jù)源中去時(shí),作為客戶,查詢處理器從各個(gè)基本表生成的記錄集中檢索所需的行;作為提供者,查詢處理器根據(jù)那些行生成記錄集,并把它返回到用戶那里。第五章數(shù)據(jù)庫互聯(lián)1/14/202365濟(jì)南大學(xué)管理學(xué)院信管系圖5.18典型的OLEDB應(yīng)用程序流程數(shù)據(jù)源會(huì)話命令行集IDBCreateSession接口CreateSessionIDBCreateCommand接口CreateCommandICommand接口Execute()COM環(huán)境CoCreateInstance()函數(shù)或是調(diào)用枚舉器查詢第五章數(shù)據(jù)庫互聯(lián)5OLEDB應(yīng)用程序的基本流程1/14/202366濟(jì)南大學(xué)管理學(xué)院信管系(1)初始化COM環(huán)境。任何使用OLEDB的應(yīng)用程序首先必須初始化COM接口,提供COM工作環(huán)境。(2)建立及初始化一個(gè)數(shù)據(jù)源對象。方法有:一是直接調(diào)用CoCreateInstance()函數(shù),二是調(diào)用枚舉器查詢可用的數(shù)據(jù)提供程序,得到數(shù)據(jù)源對象的初始化接口。(3)創(chuàng)建會(huì)話。調(diào)用數(shù)據(jù)源對象的接口IDBCreateSession中的函數(shù)CreateSession()建立一個(gè)會(huì)話對象。(4)獲得行集。這是為了得到其中的查詢返回值。方法有:一是調(diào)用會(huì)話對象的接口IOpenRowset中的函數(shù)OpenRowset()直接打開一個(gè)行集對象;二是執(zhí)行SQL命令返回行集對象。(5)操作行集。步驟為:①獲得數(shù)據(jù)源的列信息;②創(chuàng)建并操作訪問器;③獲取行集中的每一行,得到訪問結(jié)果。第五章數(shù)據(jù)庫互聯(lián)5OLEDB應(yīng)用程序的基本流程1/14/202367濟(jì)南大學(xué)管理學(xué)院信管系

6OLEDB的客戶模板結(jié)構(gòu)

OLEDB提供了一個(gè)模板庫,庫中的模板類提供了一個(gè)更容易的方式去訪問由底層OLEDB接口提供的高性能技術(shù),用來實(shí)現(xiàn)許多常用的OLEDB接口。(1)OLEDB客戶模板結(jié)構(gòu)OLEDB客戶模板結(jié)構(gòu)可分為三部分:一般數(shù)據(jù)源支持類;支持?jǐn)?shù)據(jù)訪問和行集操作的類;處理表和命令的類。第五章數(shù)據(jù)庫互聯(lián)1/14/202368濟(jì)南大學(xué)管理學(xué)院信管系

(2)數(shù)據(jù)訪問和行集支持

OLEDB模板通過CAccessorRowset類,使用存取器和行集來設(shè)置和獲取數(shù)據(jù),提供了數(shù)據(jù)訪問和行集支持。OLEDB模板還定義了三種類型的行集,即單行集(由Crow實(shí)現(xiàn))、多行集(由CBulkRowset實(shí)現(xiàn))和數(shù)據(jù)行集(由CArrayRowset實(shí)現(xiàn))。第五章數(shù)據(jù)庫互聯(lián)1/14/202369濟(jì)南大學(xué)管理學(xué)院信管系

(3)命令和表OLEDB模板客戶結(jié)構(gòu)提供的表(CTable)和命令(CCommand)類可以用于訪問行集,也就是打開行集、執(zhí)行命令,以及初始化綁定。對于支持命令的數(shù)據(jù)源,可以換用OLEDB模板的CCommand類。該類通常用于實(shí)現(xiàn)命令。它調(diào)用一個(gè)稱為Open的成員函數(shù),就可實(shí)現(xiàn)單個(gè)命令。調(diào)用一個(gè)稱為Prepare的函數(shù)可以設(shè)置一個(gè)命令,執(zhí)行多次操作。當(dāng)使用CCommand類時(shí),用戶需要特別指明三個(gè)模板參數(shù):即一個(gè)存取器類型、一個(gè)行集和結(jié)果類型(默認(rèn)值為CNoMultipleResults)。如果用戶指定CMultipleResults為第三個(gè)模板參數(shù),則CCommand類將支持IMultipleResults接口,并處理多個(gè)行集。第五章數(shù)據(jù)庫互聯(lián)1/14/202370濟(jì)南大學(xué)管理學(xué)院信管系

7OLEDB的提供者模板結(jié)構(gòu)

OLEDB提供者模板結(jié)構(gòu)中包括數(shù)據(jù)源和若干個(gè)會(huì)話。(1)數(shù)據(jù)源對象第五章數(shù)據(jù)庫互聯(lián)數(shù)據(jù)源對象接口要求是否由OLEDB模板類實(shí)現(xiàn)?IDBInitialize必需實(shí)現(xiàn)是IDBCreatsSession必需實(shí)現(xiàn)是IDBProperties必需實(shí)現(xiàn)是IPersist必需實(shí)現(xiàn)是IDBDataSourceAdmin可選擇實(shí)現(xiàn)否IConnectionPointContainer可選擇實(shí)現(xiàn)否IDBInfo可選擇實(shí)現(xiàn)否IpersistFile可選擇實(shí)現(xiàn)否ISupportErrorInfo可選擇實(shí)現(xiàn)否1/14/202371濟(jì)南大學(xué)管理學(xué)院信管系下面的程序片段是說明當(dāng)用戶為OLEDB提供者創(chuàng)建數(shù)據(jù)源時(shí)由ALT對象向?qū)Р迦氲某绦颍篶lassATL_NO_VTABLECAProviderSource:publicCcomObjectRootEx<CcomSingleThreadModel>,publicCComCoClass<CAProviderSourse,&CLSID_AProvider>,publicIDBCreateSessionImpl<CAProviderSource,CAProviderSession>,publicIDBInitializeImpl<CAProviderSource>,publicIDBPropertiesImpl<CAProviderSource>,publicIpersistImpl<CAProviderSource>,publicIinternalConnectionImpl<CAProviderSource>{};第五章數(shù)據(jù)庫互聯(lián)1/14/202372濟(jì)南大學(xué)管理學(xué)院信管系(2)命令對象支持建立和執(zhí)行查詢的提供者陳列一個(gè)命令對象。命令對象指定、準(zhǔn)備并實(shí)現(xiàn)一次DML查詢,或者是一次DDL定義及其相關(guān)屬性。第五章數(shù)據(jù)庫互聯(lián)命令對象接口要求是否由OLEDB模板類實(shí)現(xiàn)?Iaccessor必需實(shí)現(xiàn)是IcolumnsInfo必需實(shí)現(xiàn)是ICommand必需實(shí)現(xiàn)是ICommandProperties必需實(shí)現(xiàn)是ICommandText必需實(shí)現(xiàn)是IConnectionPointContainer必需實(shí)現(xiàn)是IcovertType必需實(shí)現(xiàn)是IColumnsARowset可選擇實(shí)現(xiàn)否ICommandPrepare

可選擇實(shí)現(xiàn)否ICommandWithParameters可選擇實(shí)現(xiàn)否1/14/202373濟(jì)南大學(xué)管理學(xué)院信管系下面給出的是當(dāng)用戶創(chuàng)建OLEDB提供者時(shí)由ALT對象向?qū)Р迦氲摹⒂靡詫?shí)現(xiàn)一個(gè)命令對象的程序片段:classATL_NO_VTABLECAProviderCommand:publicCComObjectRooEx<CComSingleThreadModel>,publicIAccessorImpl<CAProviderCommand>,publicICommandTextImpl<CAProviderCommand>,publicICommandPropertiesImpl<CAProviderCommand>,publicIObjectWithSiteImpl<CAProviderCommand>,publicICnvertTypeImpl<CAProviderCommand>,publicIClumnsInfoImpl<CAProviderCommand>{};第五章數(shù)據(jù)庫互聯(lián)1/14/202374濟(jì)南大學(xué)管理學(xué)院信管系(3)會(huì)話對象會(huì)話對象定義了實(shí)現(xiàn)的范圍,并從數(shù)據(jù)源中生成行集。會(huì)話對象還能生成命令對象,命令對象在行集中實(shí)現(xiàn)命令。第五章數(shù)據(jù)庫互聯(lián)會(huì)話對象接口要求是否由OLEDB模板類實(shí)現(xiàn)?IGetDataSource必需實(shí)現(xiàn)是IOpenRowset

必需實(shí)現(xiàn)是ISssionProperties

必需實(shí)現(xiàn)是IDBCreateCommand

可選擇實(shí)現(xiàn)是IDBCchemaRowset可選擇實(shí)現(xiàn)是IIndexDefinition可選擇實(shí)現(xiàn)否ISportErrorInfo

可選擇實(shí)現(xiàn)否ITbleDefinition可選擇實(shí)現(xiàn)否ITansactionJoin可選擇實(shí)現(xiàn)否ITansactionLocal可選擇實(shí)現(xiàn)否ITransactionObject可選擇實(shí)現(xiàn)否1/14/202375濟(jì)南大學(xué)管理學(xué)院信管系下面是一個(gè)顯示了當(dāng)用戶創(chuàng)建OLEDB提供者時(shí)由ALT對象向?qū)Р迦氲摹⒂靡酝瓿梢粋€(gè)會(huì)話對象的程序片段:classATL_NO_VTABLECAProviderSession: publicCCmObjectRootEx<CcomSingleTheadModel>, publicIGetDataSourceImpl<CAProviderSession>, publicIOpenRowsetImpl<CAProviderSession>, pblicISessionPropertiesImpl<CAProviderSession>, publicIObjectWithSiteSessionImpl<CAProviderSession>, publicIDBSchemaRowsetImpl<CAProviderSession>, publicIDBCreateCommandImpl<CAProviderSession,CAProviderCommand>{};第五章數(shù)據(jù)庫互聯(lián)1/14/202376濟(jì)南大學(xué)管理學(xué)院信管系(4)行集對象第五章數(shù)據(jù)庫互聯(lián)接口要求是否由OLEDB模板類實(shí)現(xiàn)?Iaccessor必需實(shí)現(xiàn)是IcolumnsInfo必需實(shí)現(xiàn)是IConvertTypeo必需實(shí)現(xiàn)是IRowset必需實(shí)現(xiàn)是IRowsetInfo必需實(shí)現(xiàn)是IColumnsRowset可選擇實(shí)現(xiàn)否IConnectionPointContainer可選擇實(shí)現(xiàn)是,通過ALTIRowsetChange可選擇實(shí)現(xiàn)否IRowsetIdenity對0級要求是IRowsetLocate可選擇實(shí)現(xiàn)否IRowsetResyncb可選擇實(shí)現(xiàn)否IRowsetScroll可選擇實(shí)現(xiàn)否IRowsetUpdate可選擇實(shí)現(xiàn)否ISupportErrorInfo可選擇實(shí)現(xiàn)否1/14/202377濟(jì)南大學(xué)管理學(xué)院信管系

下面是一個(gè)顯示了當(dāng)用戶創(chuàng)建OLEDB提供者時(shí)由ALT對象向?qū)Р迦氲?、用以?shí)現(xiàn)一個(gè)行集對象的代碼片段:classCAProviderWindowsFile:publicWIN32_FIND_DATA{public:BEGIN_PROVIDER_COLUMN_ENTRY(“FileAttributes",1,dwFileattributes)PROVIDER_COLUMN_ENTRY("FileSizeHigh",2,nFileSizeHigh)PROVIDER_COLUMN_ENTRY("FilesSizeLow",3,nFileSizeLow)PROVIDER_COLUMN_ENTRY("FileName",4,cFileName)PROVIDER_COLUMN_ENTRY("AltFileName",5,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論