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

下載本文檔

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

文檔簡介

1、開放數(shù)據(jù)庫互連課件網(wǎng)絡(luò)數(shù)據(jù)庫網(wǎng)絡(luò)數(shù)據(jù)庫Web Database第五章第五章 開放數(shù)據(jù)庫互連開放數(shù)據(jù)庫互連開放數(shù)據(jù)庫互連課件第五章第五章 開放數(shù)據(jù)庫互連開放數(shù)據(jù)庫互連5.1 開放的數(shù)據(jù)庫訪問接口5.2 ODBC與DAO5.3 JDBC原理與應(yīng)用5.4 OLE DB和ADO概述5.5 數(shù)據(jù)庫中間件開放數(shù)據(jù)庫互連課件5.1 開放的數(shù)據(jù)庫訪問接口開放的數(shù)據(jù)庫訪問接口 提出開放式數(shù)據(jù)庫訪問接口的目的是要為數(shù)據(jù)庫應(yīng)用程序開發(fā)人員訪問不同的數(shù)據(jù)庫提供統(tǒng)一的訪問方式,實現(xiàn)開放數(shù)據(jù)庫的互聯(lián),從而減小編程的工作量和開發(fā)時間。 目前流行的開放數(shù)據(jù)庫訪問接口有ODBC,JDBC,OLE DB和數(shù)據(jù)庫網(wǎng)關(guān)。開放數(shù)據(jù)庫互

2、連課件ODBCnODBC是Microsoft推出的一個開放式數(shù)據(jù)庫接口標準。nODBC為應(yīng)用程序提供了一個定義良好的、不依賴于數(shù)據(jù)庫的應(yīng)用程序接口(API),并且它的數(shù)據(jù)庫驅(qū)動模塊保持了與SQL標準的一致性。n使用API時,ODBC通過一個驅(qū)動管理器驅(qū)動管理器來判定應(yīng)用程 序要連接的數(shù)據(jù)庫的類型,并載入(或卸載)適當?shù)?ODBC驅(qū)動驅(qū)動,這樣就實現(xiàn)了應(yīng)用程序和數(shù)據(jù)庫之間的 相互獨立,簡化了從操作系統(tǒng)到數(shù)據(jù)庫的訪問。開放數(shù)據(jù)庫互連課件n現(xiàn)有的ODBC是32位版本的,且是免費的。大多數(shù)的數(shù)據(jù)庫都有ODBC驅(qū)動,這些ODBC驅(qū)動是由數(shù)據(jù)庫供應(yīng)商或第三方提供商提供的。n目前,越來越多的第三方廠商在設(shè)計

3、應(yīng)用開發(fā)集成環(huán)境時,積極采用ODBC技術(shù),使應(yīng)用開發(fā)工具可通過ODBC實現(xiàn)對異構(gòu)數(shù)據(jù)庫的快捷和方便訪問。開放數(shù)據(jù)庫互連課件JDBCnJDBC(Java DataBase Connectivity)是JavaSoft公司公司提供的第一個支持第一個支持Java語言的數(shù)據(jù)庫語言的數(shù)據(jù)庫API。n它支持基本SQL功能,在不同的數(shù)據(jù)庫功能模塊的層次上為開發(fā)人員提供了一個進行Java應(yīng)用程序開發(fā)時訪問各種數(shù)據(jù)庫的統(tǒng)一的用戶界面,同時還提供了多樣化的數(shù)據(jù)連接方式。nJava開發(fā)人員只需面對簡單的數(shù)據(jù)庫界面進行操作,使得獨立于DBMS的Java應(yīng)用程序的開發(fā)工具和產(chǎn)品成為可能。開放數(shù)據(jù)庫互連課件nJDBC主要

4、由兩層組成:JDBC應(yīng)用程序接口應(yīng)用程序接口(JDBC API)和JDBC驅(qū)動程序接口驅(qū)動程序接口。nJDBC API提供從應(yīng)用程序到JDBC管理器的通訊,開發(fā)者通過API使用標準Java機制訪問數(shù)據(jù)庫。n數(shù)據(jù)庫供應(yīng)商提供JDBC驅(qū)動接口,也可以通過JDBC-ODBC連接橋使用傳統(tǒng)的ODBC連接。開放數(shù)據(jù)庫互連課件OLE DBnOLE DB是基于基于COM接口接口的數(shù)據(jù)庫開發(fā)技術(shù),解決了Windows環(huán)境下不同對象之間的集成問題,能訪問各種DBMS和非DBMS數(shù)據(jù)源。nOLE DB定義了一種能進行組件式數(shù)據(jù)庫訪問的組件能進行組件式數(shù)據(jù)庫訪問的組件,它通過把數(shù)據(jù)庫的功能分為數(shù)據(jù)使用者數(shù)據(jù)使用者和

5、數(shù)據(jù)提供者數(shù)據(jù)提供者兩個方面。n數(shù)據(jù)使用者并非直接對數(shù)據(jù)源發(fā)出指令,而是通過OLE接口與數(shù)據(jù)提供者進行交互,數(shù)據(jù)提供者從數(shù)據(jù)源取得所要的數(shù)據(jù)后以表格的形式提交給接口,再由數(shù)據(jù)使用者從接口中取出并使用。開放數(shù)據(jù)庫互連課件數(shù)據(jù)庫網(wǎng)關(guān)數(shù)據(jù)庫網(wǎng)關(guān)n也叫SQL網(wǎng)關(guān)網(wǎng)關(guān),是一種應(yīng)用程序接口,通過使用同一接口提供對運行在多種平臺上的不同數(shù)據(jù)庫的訪問。n數(shù)據(jù)庫網(wǎng)關(guān)為開發(fā)者提供訪問任意數(shù)據(jù)庫的接口,包括一些運行在典型的不易訪問的環(huán)境下的數(shù)據(jù)庫。n例如:通過一個ODBC接口和一個數(shù)據(jù)庫網(wǎng)關(guān),可以同時訪問存儲在大型主機環(huán)境下的DB2數(shù)據(jù)庫、小型機上的Oracle數(shù)據(jù)庫和Unix服務(wù)器上的Sybase數(shù)據(jù)庫。開放數(shù)據(jù)

6、庫互連課件第五章第五章 開放數(shù)據(jù)庫互連開放數(shù)據(jù)庫互連5.1 開放的數(shù)據(jù)庫訪問接口5.2 ODBC與DAO5.3 JDBC原理與應(yīng)用5.4 OLE DB和ADO概述5.5 數(shù)據(jù)庫中間件開放數(shù)據(jù)庫互連課件5.2 ODBC與與DAO5.2.1 ODBC和DAO的概述5.2.2 ODBC的組成結(jié)構(gòu)5.2.3 ODBC的基本工作流程5.2.4 使用ODBC API建立應(yīng)用程序5.2.5 ODBC數(shù)據(jù)源的管理5.2.6 用DAO實現(xiàn)訪問數(shù)據(jù)庫開放數(shù)據(jù)庫互連課件5.2.1 ODBC概述概述nODBC通過定義標準接口(ODBC API)來允許使用不同技術(shù)、并通過特定通信方法訪問特定數(shù)據(jù)源。nODBC建立了一組

7、規(guī)范一組規(guī)范,為應(yīng)用程序提供了一種滿足各自需要的API方法,并且它的驅(qū)動模塊保持了與SQL標準的一致性。n一個基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴于任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫操作由相應(yīng)數(shù)據(jù)庫產(chǎn)品的ODBC驅(qū)動程序完成。開放數(shù)據(jù)庫互連課件nODBC允許應(yīng)用程序訪問它支持的不同數(shù)據(jù)源,實現(xiàn)數(shù)據(jù)源驅(qū)動的是ODBC函數(shù)調(diào)用的動態(tài)鏈接庫函數(shù)調(diào)用的動態(tài)鏈接庫。n在數(shù)據(jù)源和ODBC API之間起聯(lián)系作用的是為不同數(shù)據(jù)庫專門開發(fā)的ODBC驅(qū)動程序驅(qū)動程序。nODBC驅(qū)動程序的主要作用驅(qū)動程序的主要作用包括:連結(jié)數(shù)據(jù)庫管理,錯誤處理管理,數(shù)據(jù)類型轉(zhuǎn)換,對各種DBMS以不同方式提供的

8、表、列及其他對象進行訪問管理。開放數(shù)據(jù)庫互連課件5.2.1 DAO概述概述nDAO(Database Access Object,數(shù)據(jù)庫訪問對象)是是一組對象類的集合。它提供了管理一個關(guān)系數(shù)據(jù)庫系統(tǒng)所需的全部操作的屬性和方法。其中包括創(chuàng)建數(shù)據(jù)庫,定義表、字段和索引,定位和查詢數(shù)據(jù)庫等。nDAO 使用使用 Microsoft Jet 數(shù)據(jù)庫引擎數(shù)據(jù)庫引擎提供一組數(shù)據(jù)訪問對象:數(shù)據(jù)庫對象、tabledef 和 querydef 對象、記錄集對象以及其他對象。nDAO 與 .Mdb 文件(如 Microsoft Access 創(chuàng)建的 .Mdb 文件)一起使用效果最佳,但是也可以通過 DAO 和 Mi

9、crosoft Jet 數(shù)據(jù)庫引擎訪問 ODBC 數(shù)據(jù)源。開放數(shù)據(jù)庫互連課件5.2.1 ODBC與與DAO的區(qū)別的區(qū)別n在ADO技術(shù)沒有出現(xiàn)以前,Windows環(huán)境下進行數(shù)據(jù)庫訪問工作一般有兩種選擇:使用DAO技術(shù)或者使用ODBC技術(shù)。nODBC作為Windows開放標準結(jié)構(gòu)的一個重要部分已經(jīng)為很多Windows程序員所熟悉,而DAO是Windows API的一個部分,可以獨立于DBMS進行數(shù)據(jù)庫訪問。nODBC訪問數(shù)據(jù)庫的機制與訪問數(shù)據(jù)庫的機制與DAO完全不同:完全不同:開放數(shù)據(jù)庫互連課件 ODBC的工作依賴于數(shù)據(jù)庫制造商提供的驅(qū)動程序,使用ODBC API時,Windows的ODBC管理程

10、序把數(shù)據(jù)庫訪問的請求傳遞給正確的驅(qū)動程序,驅(qū)動程序再使用SQL語句指示DBMS完成數(shù)據(jù)庫訪問工作。 而DAO直接使用Microsoft提供的數(shù)據(jù)庫連接性引擎技術(shù)(Jet)對數(shù)據(jù)庫訪問對象集進行工作,速度比ODBC快。開放數(shù)據(jù)庫互連課件5.2 ODBC與與DAO5.2.1 ODBC和DAO的概述5.2.2 ODBC的組成結(jié)構(gòu)5.2.3 ODBC的基本工作流程5.2.4 使用ODBC API建立應(yīng)用程序5.2.5 ODBC數(shù)據(jù)源的管理5.2.6 用DAO實現(xiàn)訪問數(shù)據(jù)庫開放數(shù)據(jù)庫互連課件5.2.2 ODBC的組成結(jié)構(gòu)的組成結(jié)構(gòu)應(yīng)用程序(Application)ODBC應(yīng)用程序接口(ODBC API)

11、ODBC驅(qū)動程序管理器(ODBC Driver Manager)驅(qū)動程序(Driver1)驅(qū)動程序(Driver2)驅(qū)動程序(Driver3)數(shù)據(jù)源Data Source1數(shù)據(jù)源Data Source2數(shù)據(jù)源Data Source3圖圖5.1 ODBC的組成結(jié)構(gòu)的組成結(jié)構(gòu)開放數(shù)據(jù)庫互連課件n應(yīng)用程序應(yīng)用程序(Application) 應(yīng)用程序主要負責(zé)處理并調(diào)用ODBC函數(shù),發(fā)送對數(shù)據(jù)庫的SQL請求及取得結(jié)果。n應(yīng)用程序接口應(yīng)用程序接口(ODBC API) ODBC API是ODBC運用數(shù)據(jù)通信、數(shù)據(jù)傳輸協(xié)議、DBMS等多種技術(shù)協(xié)同完成的標準接口。 應(yīng)用程序通過ODBC API與數(shù)據(jù)源進行數(shù)據(jù)交

12、換,因此應(yīng)用程序接口屏蔽了不同的ODBC數(shù)據(jù)庫驅(qū)動器之間函數(shù)調(diào)用的差別,屏蔽了底層數(shù)據(jù)庫系統(tǒng)的不同,為用戶提供統(tǒng)一的SQL編程接口和調(diào)用級界面。開放數(shù)據(jù)庫互連課件n驅(qū)動程序管理器驅(qū)動程序管理器(ODBC Driver Manager) 驅(qū)動程序管理器的功能在于管理多個應(yīng)用程序和多個驅(qū)動程序,它是一個帶有輸入程序的動態(tài)鏈接庫動態(tài)鏈接庫(DLL),可以鏈接到所有的ODBC應(yīng)用程序中。 主要目的主要目的是為應(yīng)用程序裝載數(shù)據(jù)庫驅(qū)動程序,處理ODBC調(diào)用的初始化調(diào)用,提供ODBC調(diào)用的參數(shù)有效性和序列有效性。開放數(shù)據(jù)庫互連課件n數(shù)據(jù)庫驅(qū)動程序數(shù)據(jù)庫驅(qū)動程序(ODBC Driver) ODBC驅(qū)動程序的功

13、能在于處理ODBC調(diào)用,向數(shù)據(jù)庫源提交SQL請求,并將SQL語句翻譯成相應(yīng)的DBMS規(guī)定形式,負責(zé)與任何訪問數(shù)據(jù)源的軟件交互。 數(shù)據(jù)庫驅(qū)動是ODBC的核心,ODBC通過使用驅(qū)動來保持數(shù)據(jù)庫的獨立性。各主要數(shù)據(jù)庫廠商都提供了支持自己的數(shù)據(jù)庫的ODBC驅(qū)動程序。 開放數(shù)據(jù)庫互連課件n數(shù)據(jù)源數(shù)據(jù)源(Data Source) 數(shù)據(jù)源由用戶想要存取的數(shù)據(jù)、與它相關(guān)的DBMS、操作系統(tǒng)平臺和用于訪問DBMS的網(wǎng)絡(luò)平臺組成。它負責(zé)為應(yīng)用程序存儲和管理數(shù)據(jù)。數(shù)據(jù)源包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,實際上是一種數(shù)據(jù)連接的抽象。開放數(shù)據(jù)庫互連課件5.2 ODBC與與DAO5.2.1 ODBC和DAO的概述5.2

14、.2 ODBC的組成結(jié)構(gòu)5.2.3 ODBC的基本工作流程5.2.4 使用ODBC API建立應(yīng)用程序5.2.5 ODBC數(shù)據(jù)源的管理5.2.6 用DAO實現(xiàn)訪問數(shù)據(jù)庫開放數(shù)據(jù)庫互連課件5.2.3 ODBC的基本工作流程的基本工作流程數(shù)據(jù)源名(DSN)應(yīng)用程序ODBC管理器ODBC API驅(qū)動程序管理器ODBC驅(qū)動程序數(shù)據(jù)源應(yīng)用層ODBC數(shù)據(jù)層圖圖5.2 ODBC的基本工作流程的基本工作流程開放數(shù)據(jù)庫互連課件5.2 ODBC與與DAO5.2.1 ODBC和DAO的概述5.2.2 ODBC的組成結(jié)構(gòu)5.2.3 ODBC的基本工作流程5.2.4 使用ODBC API建立應(yīng)用程序5.2.5 ODBC

15、數(shù)據(jù)源的管理5.2.6 用DAO實現(xiàn)訪問數(shù)據(jù)庫開放數(shù)據(jù)庫互連課件5.2.4 使用使用ODBC API建立應(yīng)用程序建立應(yīng)用程序nODBC API是由一組函數(shù)調(diào)用組成,其核心是SQL。nODBC函數(shù)的主要功能是將SQL語句發(fā)送到目標數(shù)據(jù)庫中,然后處理SQL語句返回的結(jié)果。n編寫ODBC程序的基本步驟:n為ODBC分配環(huán)境句柄n分配一個連接句柄n連接到數(shù)據(jù)庫n分配一個語句句柄n傳送SQL命令,完成數(shù)據(jù)庫操作n關(guān)閉連接n解除連接和環(huán)境句柄開放數(shù)據(jù)庫互連課件SQLAllocHandle(ENV)SQLSetEnvAttrSQLAllocHandle(DBC)SQLConnectSQLSetConnect

16、AttrSQLGetInfoSQLAllocHandle(STMT)SQLSetStmtAttrSQLExecDirect ORSQLPrepareSQLExecuteSelect or Update/Delete.InsertSQL NumResultColsSQL BindCOLSQL FetchSQL GetDataSQL CloseCursorSQL FreeHandle(STMT)SQL DisconnectSQL FreeHandle(DBC)SQL FreeHandle(ENV)ODBC初始化函數(shù)使用ODBCAPI檢索數(shù)據(jù)執(zhí)行SQL命令使用結(jié)果集釋放空間圖圖5.3 ODBC AP

17、I應(yīng)用的結(jié)構(gòu)應(yīng)用的結(jié)構(gòu)開放數(shù)據(jù)庫互連課件5.2 ODBC與與DAO5.2.1 ODBC和DAO的概述5.2.2 ODBC的組成結(jié)構(gòu)5.2.3 ODBC的基本工作流程5.2.4 使用ODBC API建立應(yīng)用程序5.2.5 ODBC數(shù)據(jù)源的管理5.2.6 用DAO實現(xiàn)訪問數(shù)據(jù)庫開放數(shù)據(jù)庫互連課件5.2.5 ODBC數(shù)據(jù)源的管理數(shù)據(jù)源的管理nODBC數(shù)據(jù)源管理由ODBC驅(qū)動程序管理器完成。驅(qū)動程序管理器是一個Windows環(huán)境下的應(yīng)用程序,文件名為ODBC32.EXE,在安裝微軟的SQL Server、VB等軟件時,系統(tǒng)會自動安裝ODBC驅(qū)動程序管理器。nODBC數(shù)據(jù)源管理器可以用來顯示系統(tǒng)安裝SQ

18、L Server ODBC驅(qū)動程序的版本信息,并可用來添加、更改和刪除SQL Server ODBC驅(qū)動程序的數(shù)據(jù)源以及為用戶、系統(tǒng)和文件數(shù)據(jù)源設(shè)置選項。開放數(shù)據(jù)庫互連課件5.2.5 添加添加ODBC數(shù)據(jù)源數(shù)據(jù)源n數(shù)據(jù)源在使用之前必須通過ODBC管理器進行登記和連接,啟動ODBC管理器后,選取Add按鈕,根據(jù)自己的數(shù)據(jù)庫類型,選擇相應(yīng)的ODBC驅(qū)動程序,然后輸入數(shù)據(jù)源名(data source name )和數(shù)據(jù)庫文件名(database name),完成這些步驟后,應(yīng)用程序就能夠通過ODBC管理器的數(shù)據(jù)源直接操縱數(shù)據(jù)庫。n下面以Windows2000下的ODBC管理器為例,介紹其中各個頁面的

19、用途:開放數(shù)據(jù)庫互連課件n用戶DSN:ODBC用戶數(shù)據(jù)源存儲了如何與指定數(shù)據(jù)庫提供者連接的信息,用戶數(shù)據(jù)源只對當前用戶可見,且只能用于當前機器。n系統(tǒng)DSN:ODBC系統(tǒng)數(shù)據(jù)源存儲了如何指定數(shù)據(jù)庫提供者連接的信息。系統(tǒng)數(shù)據(jù)源對當前機器上的所有用戶都是可見的。也就是說,這里配置的數(shù)據(jù)源,只要是這臺機器的用戶都可以訪問。n文件DSN:ODBC文件數(shù)據(jù)源允許用戶連接數(shù)據(jù)提供者,它可以由安裝了相同驅(qū)動程序的用戶共享。開放數(shù)據(jù)庫互連課件n驅(qū)動程序:列出了本機上所有安裝的數(shù)據(jù)庫驅(qū)動程序,包括驅(qū)動程序的名稱、版本、提供商、驅(qū)動程序文件名以及安裝日期。n跟蹤:ODBC跟蹤允許創(chuàng)建調(diào)用ODBC的日志,提供給技術(shù)

20、人員查看。頁面中可以設(shè)定日志的路徑和文件名。n連接池:允許應(yīng)用程序重用原來打開的連接句柄,這樣可以節(jié)省服務(wù)器的往返過程。n關(guān)于:該頁列出了所有的ODBC的核心文件。開放數(shù)據(jù)庫互連課件5.2 ODBC與與DAO5.2.1 ODBC和DAO的概述5.2.2 ODBC的組成結(jié)構(gòu)5.2.3 ODBC的基本工作流程5.2.4 使用ODBC API建立應(yīng)用程序5.2.5 ODBC數(shù)據(jù)源的管理5.2.6 用DAO實現(xiàn)訪問數(shù)據(jù)庫開放數(shù)據(jù)庫互連課件5.2.6 用用DAO實現(xiàn)訪問數(shù)據(jù)庫實現(xiàn)訪問數(shù)據(jù)庫nDAO對象模型 DAO是一種完全面向?qū)ο蟮臄?shù)據(jù)庫訪問接口,對編程人員來說只須了解DAO的使用就可以對幾乎任何一種數(shù)

21、據(jù)庫進行操作。它通過數(shù)據(jù)庫引擎技術(shù)把數(shù)據(jù)訪問對象上的操作轉(zhuǎn)換為對數(shù)據(jù)庫文件自身的物理操作。 DAO對象模型是一個分層的樹型結(jié)構(gòu),該結(jié)構(gòu)由對象和集合構(gòu)成。在DAO編程中,用對象變量代表對象的引用。開放數(shù)據(jù)庫互連課件圖圖5.4 DAO對象模型的結(jié)構(gòu)示意圖對象模型的結(jié)構(gòu)示意圖開放數(shù)據(jù)庫互連課件ReordSet對象的創(chuàng)建步驟:n引用數(shù)據(jù)庫連接引擎:由于DAO使用數(shù)據(jù)庫引擎機制訪問數(shù)據(jù)庫,因此首先要將Jet3.5/Jet2.5引入到工程中。n創(chuàng)建RecordSet對象變量n聲明一個Recordset類型的變量n使用Database, Connection, TableDef, QueryDef對象的Op

22、enRecordSet方法方法返回Recordset類型變量的值。nOpenRecordSet方法中type, options, lockedits參數(shù)的設(shè)置。開放數(shù)據(jù)庫互連課件nRecordSet對象有五種類型:表、動態(tài)集、快照、動態(tài)和僅向前。ntype=dbopentable:表類型的Recordset對象是指當前數(shù)據(jù)庫中的本地表或Microsoft Jet創(chuàng)建的外部數(shù)據(jù)庫。ntype=dbopenDynaset:動態(tài)集類型的RecordSet對象可以是本地的或者鏈接的表,也可以是返回的行查詢結(jié)果。它實際上是對一個或多個表中記錄的一系列引用ntype=dbopensnapshot:快照類型

23、的ReordSet對象包含的數(shù)據(jù)是固定的,它反映了在產(chǎn)生快照的一瞬間數(shù)據(jù)庫的狀態(tài)。與動態(tài)集類型和表類型的RecordSet對象相比,快照的處理開銷較少,因此,它執(zhí)行查詢和返回數(shù)據(jù)的速度更快。開放數(shù)據(jù)庫互連課件ntype=dbopenforwardonly:僅向前類型的Recordset對象提供了最基本的RecordSet對象功能,但通??梢赃_到最快的速度。與快照類似,從Microsoft Jet得到的僅向前類型的Recordset對象是不可更新的。另外,只允許在記錄中向前移動,而不能向相反方向移動。這種類型的Recordset對象不能被復(fù)制,而且只支持Move和MoveNext方法。ntype

24、=dbopendynamic:動態(tài)類型的Recordset對象是從一個或幾個基本表中查詢到的結(jié)果集,對于返回行的查詢,可以在其中添加、修改或刪除記錄。開放數(shù)據(jù)庫互連課件n創(chuàng)建Recordset對象的實例:使用OpenRecordset方法從本地Microsoft Jet數(shù)據(jù)庫中的表創(chuàng)建記錄集: Dim dbs As Database, rstCustomers As Recordset Set dbs=OpenDatabase(“Northwind.mdb”) Set rstCustomers=dbs.OpenRecordset(“Customers”)開放數(shù)據(jù)庫互連課件第五章第五章 開放數(shù)據(jù)

25、庫互連開放數(shù)據(jù)庫互連5.1 開放的數(shù)據(jù)庫訪問接口5.2 ODBC與DAO5.3 JDBC原理與應(yīng)用5.4 OLE DB和ADO概述5.5 數(shù)據(jù)庫中間件開放數(shù)據(jù)庫互連課件5.3 JDBC原理與應(yīng)用原理與應(yīng)用5.3.1 JDBC的概述5.3.2 JDBC訪問數(shù)據(jù)庫的模式5.3.3 JDBC與ODBC的比較5.3.4 JDBC的體系結(jié)構(gòu)及工作過程5.3.5 JDBC的接口開放數(shù)據(jù)庫互連課件5.3.1 JDBC的概述的概述nJava程序分為:Java Application和Java Applet。nJava Application是獨立運行在Java解釋器中的完整程序,而Java Applet程序嵌

26、入在HTML文件中,并在Web瀏覽器的Java解釋器中運行。編輯器編譯器解釋器源代碼.java字節(jié)碼.class圖5.5 Java Application程序的編程流程開放數(shù)據(jù)庫互連課件nJava Applet的程序由編譯器形成字節(jié)碼程序(.class)后,把該程序嵌入到HTML文件中,并在Web瀏覽器中的Java解釋器執(zhí)行,其過程入圖:Web服務(wù)器瀏覽器Web服務(wù)器請求HTML文件圖5.6 Java Applet程序的執(zhí)行過程下載HTML文件請求Applet字節(jié)碼下載Applet字節(jié)碼開放數(shù)據(jù)庫互連課件nJDBC作為標準數(shù)據(jù)庫系統(tǒng)的接口,本身就是一種數(shù)據(jù)庫應(yīng)用程序或數(shù)據(jù)庫前臺開發(fā)工具。nJD

27、BC由一組可以實現(xiàn)數(shù)據(jù)庫連接、數(shù)據(jù)庫訪問的Java API(Java應(yīng)用程序編程接口)組成。該接口提供Java程序員開發(fā)數(shù)據(jù)庫應(yīng)用程序。nJDBC API在SUN公司的JDK中作為SQL類包類包(java.sql.*)存在。開放數(shù)據(jù)庫互連課件nJDBC API提供了一組接口用于實現(xiàn)Java應(yīng)用程序與數(shù)據(jù)庫的連接,同時還可通過執(zhí)行靜態(tài)及動態(tài)SQL語句和存儲過程來訪問數(shù)據(jù)庫。nJava還引入了異常捕獲和處理的機制。提供了3個與數(shù)據(jù)庫開發(fā)有關(guān)的JDBC異常類:SQLException(訪問數(shù)據(jù)庫時接口或?qū)ο蠓椒óa(chǎn)生的異常), SQLWarning (向數(shù)據(jù)庫提交警告時產(chǎn)生的異常), DataTrun

28、ction(截斷數(shù)據(jù)時產(chǎn)生的異常)。開放數(shù)據(jù)庫互連課件nJDBC作為標準數(shù)據(jù)庫系統(tǒng)的接口,本身就是一種數(shù)據(jù)庫應(yīng)用程序或數(shù)據(jù)庫前臺開發(fā)工具。nJDBC由一組可以實現(xiàn)數(shù)據(jù)庫連接、數(shù)據(jù)庫訪問的Java API應(yīng)用程序接口組成。該接口提供Java程序員開發(fā)數(shù)據(jù)庫應(yīng)用程序。nJDBC API在SUN公司的JDK中作為SQL類包存在。 類型類型 類類驅(qū)動程序驅(qū)動程序Java.sql.DriveJava.sql.DriveManagerJava.sql.DrivePropertyInfo /版本號版本號連接連接Java.sql.Connection語句語句Java.sql.StatementJava.sql

29、.PreparedStatementJava.sql.CallableStatement結(jié)果集結(jié)果集Java.sql.ResultSet錯誤錯誤/警告警告Java.sql.SQLExceptionJava.sql.SQLWarningJava.sql.DataTruncation元數(shù)據(jù)元數(shù)據(jù)Java.sql.DatabaseMetaData /查詢底層查詢底層DBMS系統(tǒng)的表格并獲取信息系統(tǒng)的表格并獲取信息Java.sql.ResultSetMetaData /提供對結(jié)果集中列的類型和屬性的訪問方法提供對結(jié)果集中列的類型和屬性的訪問方法日期日期/時間時間Java.sql.DateJava.sq

30、l.TimeJava.sql.TimeStamp其它其它Java.sql.Types數(shù)據(jù)庫類實現(xiàn)數(shù)據(jù)庫類實現(xiàn)(JDBC是由是由Java.sql類包實現(xiàn)的類包實現(xiàn)的)開放數(shù)據(jù)庫互連課件5.3 JDBC原理與應(yīng)用原理與應(yīng)用5.3.1 JDBC的概述5.3.2 JDBC訪問數(shù)據(jù)庫的模式5.3.3 JDBC與ODBC的比較5.3.4 JDBC的體系結(jié)構(gòu)及工作過程5.3.5 JDBC的接口開放數(shù)據(jù)庫互連課件5.3.2 JDBC訪問數(shù)據(jù)庫的模式訪問數(shù)據(jù)庫的模式n為了實現(xiàn)Java與數(shù)據(jù)庫的互聯(lián),JDBC必須具備3項功 能:建立應(yīng)用程序與一個數(shù)據(jù)庫的連接;向數(shù)據(jù)庫發(fā) 送SQL語句;把數(shù)據(jù)庫查詢結(jié)果返回給應(yīng)用程

31、序。n基于JDBC的數(shù)據(jù)庫應(yīng)用系統(tǒng)體系結(jié)構(gòu)可以分為兩層模型和三層模型。 開放數(shù)據(jù)庫互連課件Java Applet/Java應(yīng)用JDBC驅(qū)動程序數(shù)據(jù)源圖圖5.7 數(shù)據(jù)庫訪問的兩層模型數(shù)據(jù)庫訪問的兩層模型 在如圖所示的兩層模型中,一個Java Applet或者一個Java應(yīng)用程序直接與數(shù)據(jù)庫交互,客戶端包括JDBC驅(qū)動程序及用戶界面,而服務(wù)器端包括DBMS。通過JDBC,把SQL語句從客戶端傳送給服務(wù)器端的數(shù)據(jù)庫,而服務(wù)器端把數(shù)據(jù)庫執(zhí)行SQL語句的結(jié)果返回給客戶端。這就是典型的客戶/服務(wù)器結(jié)構(gòu)??蛻舳丝蛻舳朔?wù)器端服務(wù)器端開放數(shù)據(jù)庫互連課件Java Applet/Java應(yīng)用JDBC驅(qū)動程序數(shù)據(jù)源

32、圖圖5.8 數(shù)據(jù)庫訪問的三層模型數(shù)據(jù)庫訪問的三層模型 在三層模型中,客戶端把命令發(fā)送到應(yīng)用服務(wù)器(“中間層”)上,中間層駐留著JDBC,它將接收到的命令轉(zhuǎn)換成SQL語句,并由JDBC發(fā)送到DBMS服務(wù)器端。數(shù)據(jù)庫系統(tǒng)把處理SQL語句的結(jié)果返回“中間層”,然后繼續(xù)由“中間層”返回客戶端。 這種結(jié)構(gòu)的典型代表是就是當前流行的瀏覽器/服務(wù)器結(jié)構(gòu)。一個應(yīng)用實例:IE(客戶端)+Apache/Tomcat(應(yīng)用服務(wù)器)+SQLServer 2000(數(shù)據(jù)庫服務(wù)器)。數(shù)據(jù)庫訪問中間層客戶端客戶端應(yīng)用服務(wù)器應(yīng)用服務(wù)器數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫服務(wù)器開放數(shù)據(jù)庫互連課件5.3 JDBC原理與應(yīng)用原理與應(yīng)用5.3.1 J

33、DBC的概述5.3.2 JDBC訪問數(shù)據(jù)庫的模式5.3.3 JDBC與ODBC的比較5.3.4 JDBC的體系結(jié)構(gòu)及工作過程5.3.5 JDBC的接口開放數(shù)據(jù)庫互連課件5.3.3 JDBC與與ODBC的比較的比較nJDBC是以X/open SQL Call Level Interface為基礎(chǔ)的,是用于訪問SQL數(shù)據(jù)的國際標準。JDBC在設(shè)計思想上沿襲了ODBC,并保持了ODBC的基本特性,即獨立于特定的數(shù)據(jù)庫。因此,JDBC API可以實現(xiàn)對任何SQL數(shù)據(jù)庫(Oracle、SQL Server及Sybase等)的訪問,并且具有跨平臺訪問數(shù)據(jù)庫的能力。開放數(shù)據(jù)庫互連課件nODBC 并不適合在并

34、不適合在Java中直接使用中直接使用。ODBC是一個C語言實現(xiàn)的API。當Java程序直接調(diào)用本地的C語言程序時,難以確保系統(tǒng)的安全性、完整性及健壯性。目前即使可以在Java中使用ODBC,也需要在JDBC的協(xié)助下,用JDBC-ODBC橋來實現(xiàn)連接。nJava不像ODBC API那樣大量使用指針,使其難于實現(xiàn)ODBC API到Java API的轉(zhuǎn)化。開放數(shù)據(jù)庫互連課件nJDBC對于純Java方案來說是必須的。當使用ODBC開發(fā)數(shù)據(jù)庫應(yīng)用系統(tǒng)時,必須在每一臺客戶機上安裝ODBC驅(qū)動器和驅(qū)動管理器。JDBC驅(qū)動器則是完全用Java語言實現(xiàn)的,JDBC的代碼可以自動的下載和安裝,較好地保證了它的安全

35、性,且JDBC將適應(yīng)任何Java平臺。 開放數(shù)據(jù)庫互連課件5.3 JDBC原理與應(yīng)用原理與應(yīng)用5.3.1 JDBC的概述5.3.2 JDBC訪問數(shù)據(jù)庫的模式5.3.3 JDBC與ODBC的比較5.3.4 JDBC的體系結(jié)構(gòu)及工作過程5.3.5 JDBC的接口開放數(shù)據(jù)庫互連課件JDBC的體系結(jié)構(gòu)的體系結(jié)構(gòu)應(yīng)用程序(Application)JDBC應(yīng)用程序接口(JDBC API)JDBC驅(qū)動程序管理器(JDBC Driver Manager)驅(qū)動程序(Driver1)驅(qū)動程序(Driver2)驅(qū)動程序(Driver3)數(shù)據(jù)源Data Source1數(shù)據(jù)源Data Source2數(shù)據(jù)源Data So

36、urce3 圖圖5.9 JDBC的組成結(jié)構(gòu)的組成結(jié)構(gòu)開放數(shù)據(jù)庫互連課件JDBC運行過程運行過程應(yīng)用程序 圖圖5.10 JDBC的運行過程的運行過程ResultSet對象1Statement對象1Connection對象1Driver對象1數(shù)據(jù)庫1ResultSet對象1Statement對象1Connection對象1Driver對象1數(shù)據(jù)庫1開放數(shù)據(jù)庫互連課件JDBC中幾個關(guān)鍵接口中幾個關(guān)鍵接口nDriverManager接口接口:用于裝載JDBC驅(qū)動程序。實現(xiàn)方法是通過調(diào)用getConnection()方法,從已注冊的驅(qū)動程序列表中為URL(數(shù)據(jù)庫定位地址)查找合適的驅(qū)動程序,返回一個與數(shù)

37、據(jù)庫連接的Connection對象。nDriver接口接口:與特定數(shù)據(jù)庫有關(guān)的驅(qū)動程序接口對象。一旦創(chuàng)建了Driver接口對象,該對象就由DriverManager接口對象來管理。由Driver接口對象提供的connect()方法可以建立訪問數(shù)據(jù)庫所需的連接對象Connection。開放數(shù)據(jù)庫互連課件JDBC中幾個關(guān)鍵接口中幾個關(guān)鍵接口(續(xù)續(xù))nConnection接口接口:提供與URL指定的數(shù)據(jù)庫管理系統(tǒng)的連接,表示與指定數(shù)據(jù)庫的交流會話。nStatement接口接口:提供向數(shù)據(jù)庫發(fā)送SQL語句的方法,完成數(shù)據(jù)庫訪問的功能。nResultSet接口接口:保留數(shù)據(jù)庫的查詢結(jié)果,應(yīng)用程序可以從R

38、esultSet對象中取得所需的數(shù)據(jù),同時也可以對ResultSet對象的修改操作映射到數(shù)據(jù)庫中。開放數(shù)據(jù)庫互連課件JDBC的驅(qū)動程序的驅(qū)動程序nJDBC的驅(qū)動程序有四類:JDBC-ODBC橋、 Java to Native API (本機API Java驅(qū)動程序)、 Java to Network Protocal(網(wǎng)絡(luò)協(xié)議Java驅(qū)動程序)和Java to Native Database Protocol(數(shù)據(jù)庫協(xié)議Java驅(qū)動程序)。n類型1:JDBC-ODBC網(wǎng)橋 JDBC-ODBC網(wǎng)橋使用標準的ODBC驅(qū)動程序提供JDBC的訪問。這個驅(qū)動程序包含在Java2 sdk的sun.jdbc

39、.odbc軟件包中,而且需要在每個使用該驅(qū)動程序的客戶機上安裝并配置本機ODBC庫、驅(qū)動程序以及必要的支持文件。開放數(shù)據(jù)庫互連課件類型類型1的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)應(yīng)用程序(Application)類型1 JDBC驅(qū)動程序本地本地JDBC-ODBC橋橋本地ODBC驅(qū)動程序數(shù)據(jù)源圖圖5.11 類型類型1的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)n所有的本地庫必須安裝在每一臺計算機上n復(fù)雜,開銷大(JDBC-ODBC-本地客戶API-數(shù)據(jù)庫)n這種驅(qū)動程序不允許Java Applet即時發(fā)送n所有的ODBC中的Bug也將出現(xiàn)在橋中n同ODBC,不能通過Internet訪問數(shù)據(jù)庫n下列情況可以考慮采用JDBC

40、-ODBC橋n快速建立系統(tǒng)原型n三層數(shù)據(jù)庫系統(tǒng)n數(shù)據(jù)庫系統(tǒng)只提供了ODBC驅(qū)動程序和已擁有ODBC驅(qū)動程序時的低成本解決方案開放數(shù)據(jù)庫互連課件n類型2: Java to Native API(本機API Java驅(qū)動程序) 本機API Java驅(qū)動程序使用本機數(shù)據(jù)庫API與數(shù)據(jù)庫系統(tǒng)的通信,完成對數(shù)據(jù)庫的API調(diào)用。類型2驅(qū)動程序通常要比類型1的速度要快。與類型1相似,本機API Java驅(qū)動程序同樣需要在客戶機上安裝并配置本機數(shù)據(jù)庫API。開放數(shù)據(jù)庫互連課件類型類型2的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)應(yīng)用程序(Application)類型2 JDBC驅(qū)動程序本地數(shù)據(jù)庫API本機數(shù)據(jù)源圖圖5.11

41、類型類型2的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)n 本機API Java驅(qū)動程序利用客戶機上的本地代碼庫與數(shù)據(jù)庫直接進行通信。n 與JDBC-ODBC同,數(shù)據(jù)庫API必須事先安裝在客戶機上。n 下列情況考慮使用Java to native API驅(qū)動程序:n 由于直接與數(shù)據(jù)庫連接,比JDBC-ODBC速度快n 作為低成本的數(shù)據(jù)庫解決方案開放數(shù)據(jù)庫互連課件n類型3: Java to Network Protocal(網(wǎng)絡(luò)協(xié)議Java驅(qū)動程序) 網(wǎng)絡(luò)協(xié)議Java驅(qū)動程序是純Java驅(qū)動程序,它使用專有的網(wǎng)絡(luò)協(xié)議同服務(wù)器上的JDBC中間件進行通信,然后再由服務(wù)器上的JDBC中間件把網(wǎng)絡(luò)協(xié)議轉(zhuǎn)換成特定數(shù)據(jù)庫的函

42、數(shù)調(diào)用。采用類型3的驅(qū)動程序,不需要在客戶機上具備本機的數(shù)據(jù)庫API,而且它們還可以在后端連接到許多不同數(shù)據(jù)庫上。開放數(shù)據(jù)庫互連課件類型類型3的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)應(yīng)用程序(Application)類型3 JDBC驅(qū)動程序JDBC中間件數(shù)據(jù)源圖圖5.7 類型類型3的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)網(wǎng)絡(luò)協(xié)議n 最靈活,能夠發(fā)布到Internet上n 通常被用在三層網(wǎng)絡(luò)解決方案中n 純Java的驅(qū)動程序,與數(shù)據(jù)庫產(chǎn)品無關(guān)INTERNET開放數(shù)據(jù)庫互連課件n類型4: Java to Native Database Protocol(數(shù)據(jù)庫協(xié)議的Java驅(qū)動程序) 也是純Java的驅(qū)動程序,它執(zhí)行專有

43、的數(shù)據(jù)庫協(xié)議與數(shù)據(jù)庫進行直接的通信。與類型3相同,類型4的驅(qū)動程序也不需要本機數(shù)據(jù)庫API,而且可以在Internet上對它進行部署,無須在客戶端上安裝。 開放數(shù)據(jù)庫互連課件類型類型4的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)應(yīng)用程序(Application)類型4 JDBC驅(qū)動程序數(shù)據(jù)源圖圖5.8 類型類型4的的JDBC體系結(jié)構(gòu)體系結(jié)構(gòu)數(shù)據(jù)庫協(xié)議n 純Java的驅(qū)動程序,通過本地協(xié)議直接與數(shù)據(jù)庫相連n 也能夠應(yīng)用于Internetn 高性能是關(guān)鍵所在INTERNET數(shù)據(jù)庫引擎開放數(shù)據(jù)庫互連課件5.3 JDBC原理與應(yīng)用原理與應(yīng)用5.3.1 JDBC的概述5.3.2 JDBC訪問數(shù)據(jù)庫的模式5.3.3 JD

44、BC與ODBC的比較5.3.4 JDBC的體系結(jié)構(gòu)及工作過程5.3.5 JDBC的接口開放數(shù)據(jù)庫互連課件5.3.5 JDBC的接口的接口nJDBC數(shù)據(jù)庫連接接口數(shù)據(jù)庫連接接口 Driver接口、DriverManager對象和Connection接口nJDBC數(shù)據(jù)庫訪問接口數(shù)據(jù)庫訪問接口 Statement接口、PrepareStatement接口和CallableStatement接口nResultSet接口對象接口對象nJava Application 數(shù)據(jù)庫應(yīng)用程序?qū)嵗_放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口nDriver接口接口與DriverManager對象對象的主要功能在于為指定U

45、RL指定的數(shù)據(jù)庫加載數(shù)據(jù)庫驅(qū)動程序,為數(shù)據(jù)庫的連接準備條件,并隱含在創(chuàng)建的驅(qū)動器接口對象中。nConnection接口接口在已有的驅(qū)動器基礎(chǔ)上,建立數(shù)據(jù)庫與應(yīng)用程序之間的一種連接通道。開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Driver接口接口n創(chuàng)建形式創(chuàng)建形式: String DriverName=“sun.jdbc.odbc.JdbcOdbcDriver”; Driver driver=(Driver)Class.forName(DriverName).newInstance( );nJDBC URL的語法為的語法為: jdbc: 其中,jdbc:JDBC協(xié)議,JDBC URL的協(xié)議總是

46、jdbc。 subprotocol:子協(xié)議,為驅(qū)動程序或連接機制的名稱。 subname:將要連接的數(shù)據(jù)庫名。例如:使用JDBC-ODBC驅(qū)動程序?qū)崿F(xiàn)數(shù)據(jù)庫連接時,URL的形式為 jdbc:odbc:students開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Driver接口接口nacceptURL( )方法方法 要求輸入一個String型的參數(shù),指明將要連接的數(shù)據(jù)庫的URL。該方法的返回值為一個布爾類型的值,表示已創(chuàng)建的驅(qū)動器是否可以與URL指定的數(shù)據(jù)庫進行連接。 例:String url=“jdbc:odbc:students”; Boolean connectible=driver.acc

47、eptURL(url); 如果url指定的數(shù)據(jù)庫可以連接,則connectible為true;否則connectible為false。開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Driver接口接口nconnect( )方法方法 要求輸入兩個參數(shù),第一個參數(shù)為String型的URL,指明將要連接的數(shù)據(jù)庫。第二個參數(shù)為數(shù)據(jù)庫用戶的一些屬性,如數(shù)據(jù)庫的用戶名和密碼。該方法實現(xiàn)創(chuàng)建一個應(yīng)用程序與數(shù)據(jù)庫連接的接口對象。 例:String url=“jdbc:odbc:students”; Boolean connectible=driver.acceptURL(url); if (connectible

48、) Properties p=new Properties(); p.put(“user”,”user1”); p.put(“password”,”password1”); Connection connection=driver.connect(url,p); 開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Driver接口接口ngetPropertyInfo( )方法方法 該方法可得到一個DriverPropertyInfo類的數(shù)組,該數(shù)組元素逐一包含系統(tǒng)所需的屬性名。ngetMajorVersion( )和和getMinorVersion( )方法方法 分別提供當前驅(qū)動器的主版本號和次版本號。

49、njdbcComplicant( )方法方法 該方法返回一個邏輯值,用于判斷當前的驅(qū)動器與JDBC接口的兼容性。如果驅(qū)動程序支持所有的接口和對象與ANSI SQL92功能相同或是其擴展,那么該驅(qū)動器與JDBC兼容。開放數(shù)據(jù)庫互連課件Driver接口的應(yīng)用實例:P177-178import java.sql.*import java.util.* public class DatabaseConnection public DatabaseConnetion() try String url=“jdbc:odbc:students”; String DriverName=“sun.jdbc.od

50、bc.JdbcOdbcDriver”; Driver driver=(Driver)Class.forName(DriverName).newInstance(); Boolean connectible=driver.acceptURL(url); if (connectible) Properties p=new Properties(); p.put(“user”,”user1”); p.put(“password”,”password1”); Connection connection=driver.connect(url,p); else System.out.prinln(“URL

51、 is not valid!”); catch(Exception e) public main(String args ) DatabaseConnection dbConnection=new DatabaseConnection(); 開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口DriverManager對象對象nregisterDriver( )和和deregisterDriver( )方法方法 registerDriver()方法用于在DriverManager對象中注冊指定的驅(qū)動器接口對象。而deregisterDriver()方法用于從DriverManager對象中刪除URL指定的

52、驅(qū)動器接口對象。 例如: String DriverName=“sun.jdbc.odbc.JdbcOdbcDriver”; Driver driver=(Driver)Class.forName(DriverName).newInstance(); DriverManager.registerDriver(driver); DriverManager.deregisterDriver(DriverName); 開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口DriverManager對象對象ngetDriver( )和和getDrivers( )方法方法 getDriver( )方法從DriverM

53、anager對象中獲得與URL指定的數(shù)據(jù)庫連接的驅(qū)動器。而getDrivers( )方法用于從DriverManager對象中得到已注冊的所有驅(qū)動器接口對象,這些驅(qū)動器接口對象構(gòu)成一個Driver型的數(shù)組。例如: String url=“jdbc:odbc:students”; String DriverName=“sun.jdbc.odbc.JdbcOdbcDriver”; Driver driver=(Driver)Class.forName(DriverName).newInstance( ); DriverManager.registerDriver(driver); Driver d

54、river1=DriverManager.getDriver(url); Driver drivers =DriverManager.getDrivers( );開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口DriverManager對象對象ngetConnection( )方法方法 getConnection( )方法與Driver接口的Connect( )不同。Driver接口的Connect( )方法是已知某一驅(qū)動程序,創(chuàng)建Driver接口對象后再建立連接;而DriverManager對象創(chuàng)建數(shù)據(jù)庫連接時,系統(tǒng)可以自動尋找合適的驅(qū)動器。 getConnection( )方法提供了3種方式來創(chuàng)建

55、數(shù)據(jù)庫連接接口對象: getConnection(URL) /構(gòu)造一個不含數(shù)據(jù)庫屬性的數(shù)據(jù)庫連接 getConnection(URL,Property) /利用屬性對象參數(shù)構(gòu)造數(shù)據(jù)庫連接getConnection(URL,username,password) /利用String型參數(shù)構(gòu)造數(shù)據(jù)庫連接開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口DriverManager對象對象例如: String url=“jdbc:odbc:students”; String DriverName=“sun.jdbc.odbc.JdbcOdbcDriver”; Driver driver=(Driver)Class

56、.forName(DriverName).newInstance(); Properties p=new Properties(); p.put(“user”,”user1”); p.put(“password”,”password1”); Connection dbConnection=DriverManager.getConnection(url,p);也可改寫為: String url=“jdbc:odbc:students”; String DriverName=“sun.jdbc.odbc.JdbcOdbcDriver”; Driver driver=(Driver)Class.fo

57、rName(DriverName).newInstance(); Connection dbConnection=DriverManager.getConnection(url,“user1”,”password1”); 開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口DriverManager對象對象nsetLoginTimeout( )和和getLoginTimeout( )方法方法 setLoginTimeout( )方法設(shè)置連接數(shù)據(jù)庫時,Driver接口對象可等待的最長時間。如果setLoginTimeout(0),則Driver接口對象可以永遠等待下去。getLoginTimeout( )用

58、于獲取建立數(shù)據(jù)庫連接時可等待的最長時間。nsetLogStream( )和和getLogStream( )方法方法 setLogStream( )用于設(shè)置DriverManager對象中的Driver接口對象所用的日志流。getLogStream()用于獲取DriverManager對象中的Driver接口對象所用的日志流。日志流用于接受Driver接口對象發(fā)送的錯誤信息和日志 信息。開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Connection接口接口nConnection接口可使一個應(yīng)用程序與多個數(shù)據(jù)庫連接。Connection接口對象的創(chuàng)建方法,可以通過Driver接口的Connect(

59、 )方法和DriverManager對象的getConnection( )方法。nConnection接口的方法主要有:事務(wù)處理方法、創(chuàng)建實現(xiàn)數(shù)據(jù)庫訪問的會話對象和錯誤處理方法。 開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Connection接口接口nCommit( )和和rollback( )方法方法 如果一個事務(wù)中的所有SQL語句都已成功執(zhí)行,就調(diào)用Commit()方法提交該事務(wù),則數(shù)據(jù)庫的任何訪問取得成功;如果一個事務(wù)中的任一SQL語句未能得到成功執(zhí)行,就回滾事務(wù),使得數(shù)據(jù)庫的內(nèi)容恢復(fù)到執(zhí)行事務(wù)前的狀態(tài)。例如: Connection dbConnection=DriverManager.

60、getConnection(url,p); dbConnection.setAutoCommit(false); /設(shè)置自動提交事務(wù)為false /一些成功執(zhí)行的SQL語句 dbCmit( ); /提交事務(wù),對數(shù)據(jù)庫永久修改 /一些不成功執(zhí)行SQL語句 dbConnection.rollback( ); /回滾事務(wù),放棄對數(shù)據(jù)庫的修改開放數(shù)據(jù)庫互連課件JDBC數(shù)據(jù)庫連接接口 Connection接口接口nsetAutoCommit( )和和getAutoCommit( )方法方法 setAutoCommit()方法決定事務(wù)的提交和回滾由數(shù)據(jù)庫自動處理,還是由應(yīng)用程序進行處理。如果setAuto

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論