国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

數據庫連接技術整理

2019-11-08 20:46:25
字體:
來源:轉載
供稿:網友

1. ODBC技術

1.1 ODBC介紹

ODBC(Open Database Connectivity,開放數據庫互連)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規范,并提供了一組對數據庫訪問的標準API(應用程序編程接口)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。

ODBD通過引進ODBC驅動當作應用程序與DBMS的中間翻譯層,來實現ODBC接口與DBMS的無關性。實現了ODBC接口的應用程序可以訪問任何安裝了ODBC驅動的DBMS。

應用程序要訪問一個數據庫,首先必須用ODBC管理器注冊一個數據源,管理器根據數據源提供的數據庫位置、數據庫類型及ODBC驅動程序等信息,建立起ODBC與具體數據庫的聯系。這樣,只要應用程序將數據源名提供給ODBC,ODBC就能建立起與相應數據庫的連接。

在64位系統中打開ODBC管理器的方法為:

(1)查看兼容的32位ODBC驅動:啟動 C:/Windows/SysWOW64/odbcad32.exe;

(2)查看64位ODBC驅動,啟動C:/WINDOWS/system32/odbcad32.exe 或者【控制面板】-【管理工具】-【數據源(ODBC)】。

1.2 ODBC的由來

早期數據庫訪問是由本機庫來執行的,例如SQL Server的DBLib以及Oracle的OCI(Oracle Call Interface,Oracle調用接口)。這樣能保證快速地訪問數據庫,但是不同的數據庫要使用不同的API來訪問,導致代碼通用性很差。

為了解決這個問題,1992年Microsoft和Sybase、Digital共同制定了ODBC標準接口,以單一的ODBC API來存取各種不同的數據庫。隨后ODBC便獲得了許多數據庫廠商和Third-Party的支持而逐漸成為標準的數據存取技術。

ODBC以當時的業界標準規范X/Open Call Level Interface(CLI)和ISO/IEC9075-3Call-LevelInterface(SQL/CLI)為涵蓋的范圍,因而支持了廣闊的數據庫。雖然ODBC在初期的版本中執行效率不佳,而且功能有限,因此也為人們所貶低。但是,隨著Microsoft不斷地改善ODBC,使ODBC的執行效率不斷增加,ODBC驅動程序的功能也日漸齊全。到目前,ODBC已經是一個穩定并且執行效率良好的數據存取引擎。不過ODBC僅支持關系數據庫,以及傳統的數據庫數據類型,并且只以C/C++語言API(API就是一些C語言的代碼,是最底層的程序,在windows中就是一些.dll的文件)形式提供服務,因而無法符合日漸復雜的數據存取應用,也無法讓腳本語言使用。因此Microsoft除了ODBC之外,也推出了其他的數據存取技術以滿足程序員不同的需要。(注:ODBC是面向過程的語言,由C語言開發出來,不能兼容多種語言,所以開發的難度大,而且只支持有限的數據庫公司,對于后來的Excel等根本不能支持)。

盡管可以編寫直接利用ODBC API的應用程序,但這是相當復雜的。為了避免這種復雜性,微軟引入了兩個對象模型:DAO(Data access Object)與RDO(Remote DataObject),可以通過過程性的ODBC API實現面向對象的訪問。

2. OLE-DB技術

2.1 OLE DB的由來

隨著數據源日益復雜化,現今的應用程序很可能需要從不同的數據源取得數據,加以處理,再把處理過的數據輸出到另外一個數據源中。更麻煩的是這些數據源可能不是傳統的關系數據庫,而可能是Excel文件,Email,Internet/Intranet上的電子簽名信息。Microsoft為了讓應用程序能夠以統一的方式存取各種不同的數據源,在1997年提出了Universal Data Access(UDA)架構。UDA以COM技術為核心,協助程序員存取企業中各類不同的數據源。UDA以OLE-DB(屬于操作系統層次的軟件)作為技術的骨架。OLE-DB定義了統一的COM接口作為存取各類異質數據源的標準,并且封裝在一組COM對象之中。藉由OLE-DB,程序員就可以使用一致的方式來存取各種數據。但仍然OLEDB是一個低層次的,利用效率不高。

2.2 OLE DB的介紹

OLE DB(Object Linking and Embedding, Database,即對象連接與嵌入)是微軟的戰略性的通向不同的數據源的低級應用程序接口。OLE DB不僅包括微軟資助的標準數據接口開放數據庫連通性(ODBC)的結構化查詢語言(SQL)能力,還具有面向其他非SQL數據類型的通路。作為微軟的組件對象模型(COM)的一種設計,OLE DB是一組讀寫數據的方法(在過去可能被稱為渠道)。OLD DB中的對象主要包括數據源對象、階段對象、命令對象和行組對象。使用OLEDB的應用程序會用到如下的請求序列:初始化OLE連接到數據源à發出命令à處理結果à釋放數據源對象并停止初始化OLE。

OLE DB標準中定義的新概念——OLE DB將傳統的數據庫系統劃分為多個邏輯組件,這些組件之間相對獨立又相互通信。這種組件模型中的各個部分被冠以不同的名稱,例如數據提供者(Data PRovider)是指提供數據存儲的軟件組件,小到普通的文本文件、大到主機上的復雜數據庫,或者電子郵件存儲,都是數據提供者的例子。有的文檔把這些軟件組件的開發商也稱為數據提供者。

我們要開啟如Access數據庫中的數據,必須用ADO.NET通過OLE DB來開啟。ADO.NET 利用OLE DB來取得數據,這是因為OLE DB了解如何和許多種數據源作溝通,所以對OLE DB有相當程度的了解是很重要的。

OLEDB 為一種開放式的標準,并且設計成COM(ComponentObject Model,一種對象的格式。凡是依照COM 的規格所制作出來的組件,皆可以提供功能讓其它程序或組件所使用。)組件。OLEDB 最主要是由三個部分組合而成:

(1)Data Providers數據提供者

地位相當于ODBC的驅動程序,負責從數據源中提供數據。凡是透過OLEDB將數據提供出來的,就是數據提供者。例如SQL Server 數據庫中的數據表,或是附文件名為mdb 的Access 數據庫檔案等,都是Data Provider。

(2)Data Consumers數據使用者

凡是使用OLEDB 提供數據的程序或組件,都是OLEDB 的數據使用者。換句話說,凡是使用ADO 的應用程序或網頁都是OLE DB 的數據使用者。

(3)Service Components服務組件

數據服務組件可以執行數據提供者以及數據使用者之間數據傳遞的工作,數據使用者要向數據提供者要求數據時,是透過OLEDB 服務組件的查詢處理器執行查詢的工作,而查詢到的結果則由指針引擎來管理。

2.3 OLE DB和ODBC的區別

由于OLEDB和ODBC標準都是為了提供統一的訪問數據接口,所以曾經有人疑惑:OLE DB是不是替代ODBC的新標準?答案是否定的。實際上,ODBC標準的對象是基于SQL的數據源(SQL-Based Data Source),而OLE DB的對象則是范圍更為廣泛的任何數據存儲。從這個意義上說,符合ODBC標準的數據源是符合OLE DB標準的數據存儲的子集。

3. ADO技術

3.1 ADO的由來

雖然OLE-DB允許程序員存取各類數據,是一個非常良好的架構,但是由于OLE-DB太底層化,而且在使用上非常復雜,需要程序員擁有高超的技巧,因此只有少數的程序員才有辦法使用OLE-DB。這讓OLE-DB無法廣為流行。為了解決這個問題,并且讓VB和腳本語言也能夠藉由OLE-DB存取各種數據源,Microsoft同樣以COM技術封裝OLE-DB為ADO對象(這一步是很重要的,實現了多種程序可以互相調,并且可以開發的語言也豐富了),簡化了程序員數據存取的工作。由于 ADO成功地封裝了OLE-DB大部分的功能,并且大量簡化了數據存取工作,因此 ADO也逐漸被愈來愈多的程序員所接受。

3.2 ADO的介紹

微軟公司的ADO(ActiveX Data Objects)是一個用于存取數據源的COM組件。它提供了編程語言和統一數據訪問方式OLE DB的一個中間層。允許開發人員編寫訪問數據的代碼而不用關心數據庫是如何實現的,而只用關心到數據庫的連接。訪問數據庫的時候,關于SQL的知識不是必要的,但是特定數據庫支持的SQL命令仍可以通過ADO中的命令對象來執行。

ADO被設計來繼承微軟早期的數據訪問對象層,包括RDO(Remote Data Objects)和DAO(Data Access Objects)。ADO在1996年冬被發布。

ADO包括了6個類:Connection,Command,Recordset,Errors,Parameters,Fields。

說通俗點OLE DB和ODBC都是最底層的東西,而ADO對象給我們提供了一個“可視化”地和應用層直接交互的組件,我們不用過多的關注OLEDB的內部機制,只需要了解ADO通過OLE DB創建數據源的幾種方法即可,就可以通過ADO輕松地獲取數據源。可以說ADO是應用程序和數據底層的一個中間層,ADO對象通過OLE DB間接取得數據庫中的數據。OLE DB只是提供了通向各種數據庫的一個通用接口,簡單的可以用圖1來表示:

圖1 采用ADO和OLEDB訪問數據源

4. ADO.NET技術

ADO和ADO.NET的目的都是為編寫數據源訪問程序提供支持,但它們是兩種完全不同的技術。

ADO使用OLE DB接口并基于微軟的COM技術,而ADO.NET基于微軟的.NET體系架構,擁有自己的ADO.NET數據庫訪問接口。眾所周知.NET體系不同于COM體系,ADO.NET接口也就完全不同于ADO和OLE DB接口,這也就是說ADO.NET和ADO是兩種數據訪問方式。

在開始設計.NET體系架構時,微軟就決定重新設計數據訪問模型,以便能夠完全的基于xml和離線計算模型。兩者的區別主要有:

(1)ADO以Recordset存儲,而ADO.NET則以DataSet存儲。Recordset看起來更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進行多表連接。反之,DataSet可以是多個表的集合。

(2)ADO的運作是一種在線方式,這意味著不論是瀏覽或更新數據都必須是實時的。ADO.NET則使用離線方式,在訪問數據的時候ADO.NET會利用XML制作數據的一份副本,ADO.NET的數據庫連接也只有在這段時間需要在線。

(3)由于ADO使用COM技術,這就要求所使用的數據類型必須符合COM規范,而ADO.NET基于XML格式,數據類型更為豐富并且不需要再做COM編排導致的數據類型轉換,從而提高了整體性能。

圖2描繪了ADO.NET體系。圖3給出了ADO.NET基于XML進行數據傳遞的原理圖。

圖2 ADO.NET架構體系

圖3 ADO.NET數據訪問原理

5. JDBC技術

5.1 JDBC介紹

JDBC(java Database Connectivity,Java數據庫連接)是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。

JDBC與ODBC一樣,也是很底層的接口,可以直接調用SQL命令。在它之上可以建立高級接口和工具。高級接口是“用戶友好”的接口,它使用的是一種更易理解和更為方便的 API,這種API在幕后被轉換為諸如 JDBC 這樣的低級接口。

5.2 JDBC與ODBC對比

Microsoft 的 ODBC API 可能是使用最廣的、用于訪問關系數據庫的編程接口。它能在幾乎所有平臺上連接幾乎所有的數據庫。為什么 Java 不使用 ODBC?對這個問題的回答是:Java 可以使用 ODBC,但最好是在 JDBC 的幫助下以JDBC-ODBC橋的形式使用,原因是ODBC 不適合直接在 Java 中使用,因為它使用 C 語言接口。從Java 調用本地 C代碼在安全性、實現、堅固性和程序的自動移植性方面都有許多缺點。從ODBC C API 到 Java API的字面翻譯是不可取的。例如,Java 沒有指針,而 ODBC 卻對指針用得很廣泛(包括很容易出錯的指針"void *")。

JDBC與ODBC都是基于X/Open的SQL調用級接口, JDBC的設計在思想上沿襲了ODBC,同時在其主要抽象和SQL CLI實現上也沿襲了ODBC,這使得JDBC容易被接受。JDBC的總體結構類似于ODBC,也有四個組件:應用程序、驅動程序管理器、驅動程序和數據源。

JDBC保持了ODBC的基本特性,也獨立于特定數據庫。使用相同源代碼的應用程序通過動態加載不同的JDBC驅動程序,可以訪問不同的DBMS。連接不同的DBMS時,各個DBMS之間僅通過不同的URL進行標識。JDBC的 DatabaseMetaData接口提供了一系列方法,可以檢查DBMS對特定特性的支持,并相應確定有什么特性,從而能對特定數據庫的特性予以支持。與ODBC一樣,JDBC也支持在應用程序中同時建立多個數據庫連接,采用JDBC可以很容易地用SQL語句同時訪問多個異構的數據庫,為異構的數據庫之間的互操作奠定基礎。

ODBC很難學。它把簡單和高級功能混在一起,而且即使對于簡單的查詢,其選項也極為復雜。相反,JDBC 盡量保證簡單功能的簡便性,而同時在必要時允許使用高級功能。如果使用ODBC,就必須手動地將ODBC驅動程序管理器和驅動程序安裝在每臺客戶機上。如果完全用Java編寫JDBC驅動程序則JDBC代碼在所有Java平臺上(從網絡計算機到大型機)都可以自動安裝、移植并保證安全性。JDBC確保了“100%純Java”的解決方案,利用Java的平臺無關性, JDBC應用程序可以自然地實現跨平臺特性,因而更適合于Internet上異構環境的數據庫應用。此外,JDBC驅動程序管理器是內置的,驅動程序本身也可通過Web瀏覽器自動下載,無須安裝、配置;而ODBC驅動程序管理器和ODBC驅動程序必須在每臺客戶機上分別安裝、配置。

目前,Microsoft又引進了ODBC之外的新API: RDO、ADO和OLE DB。這些設計在許多方面與JDBC是相同的,即它們都是面向對象的數據庫接口且基于可在ODBC上實現的類。但在這些接口中,我們未看見有特別的功能使我們要轉而選擇它們來替代ODBC,尤其是在ODBC驅動程序已建立起較為完善的市場的情況下。它們最多也就是在ODBC上加了一種裝飾而已。

6. ODAC

ODAC全稱Oracle數據訪問組件(Oracle Data Access Components),是由Oracle官方提供的在.NET環境下進行Oracle數據庫編程的一套工具組件。ODAC完全包括了開發所用的組件,例如ODP.NET、ODT、Oracle Provider for OLE DB等工具,見下圖所示:

圖4 ODAC組件內容

其中,ODP.NET提供了比ADO.NET更為優化的oracle數據庫訪問功能。具體見7.1.4;ODT則是Microsoft Visual Studio 2015,Visual Studio 2013, and Visual Studio 2012的oracle數據庫開發插件。

ODAC的下載地址為http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html。可以通過Oracle Universal Installer、xcopy、NuGet或者Microsoft Installer進行安裝。

7. Oracle數據庫訪問技術

7.1 在.NET環境下訪問Oracle

7.1.1 ODBC方式

首先下載instantclient-basic-win32-11.2.0.1.0.zip和instantclient-odbc-win32-11.2.0.1.0.zip兩個文件,將它們解壓,放到同一個文件夾下面,運行odbc_install.exe安裝。注意,oracle要與其odbc驅動的位數要匹配,如果不匹配則會報“體系結構不匹配”的錯誤。

安裝完成后,我們可以在【控制面板】-->【管理工具】-->【數據源(ODBC)】-->【系統DSN】中查看系統中已經安裝好的ODBC驅動,其中就包含了“Microsoft ODBC Driver for Oracle”。

連接字符串格式:

Driver={Microsoft ODBC for Oracle}; Server = myServerAddress; Uid = myUsername; Pwd = myPassWord;

要求:必須安裝oracle 7.3版(或更高)的客戶端。

7.1.2 OLEDB方式

打開注冊表編輯器,搜索oracle即可以搜索到以下鍵:

Microsoft OLE DBProvider for Oracle

HKEY_CLASSES_ROOT/CLSID/{e8cc4cbe-fdff-11d0-b865-00a0c9081c1d}/OLEDB Provider

HKEY_CLASSES_ROOT/MSDAORA

所以,只要安裝了合適版本的MDAC,那么就可以使用OLEDB來訪問ORACLE了。

連接字符串格式:

Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;

要求:必須安裝oracle 8i版(或更高)的客戶端。

7.1.3 OracleClient方式

OracleClient(System.Data.OracleClient)是微軟針對Oracle開發所研發的ADO.NET Data Provider,從.NET 1.x開始,就已成為.NETFramework類庫的一部分,它與微軟Visual Studio 的集成性非常好。但是從.NET 4以后的版本中將會移除該類庫,不再提供OracleClient的支持。

7.1.4 ODP.NET方式

全稱Oracle Data Provider for .net,就是Oracle 為 .NET(ODP.NET) 專門編寫了 Oracle Data Provider,一個用于 Microsoft .NET 環境下的 Oracle 數據訪問 API 。

要想從 Oracle 所支持的企業應用程序獲得預期的響應性能和高級數據庫特性,應該選擇 Oracle 專用的連接而不是一般的數據庫連接。Java 開發人員長期以來一直可以選擇使用 Oracle 提供的專用 API 連接到 Oracle 數據庫,這些 API 擴展了 JDBC 并為開發人員利用如大型對象 (LOB) 和 Ref Cursor 這樣的 Oracle 高級特性提供了一條途徑。

2002 年 2 月,Microsoft 推出了 Visual Studio .NET 及其三種語言(C# .NET、Visual Basic .NET 和 C++ .NET)以及底層的 .NET 框架。Microsoft .NET 為建立企業級的桌面、Web 和 client/server 應用程序提供了一個面向對象的開發平臺。不幸的是,使用這些 Microsoft 語言和 .NET 框架的開發人員并沒有一個現成的、專用于 Oracle 的數據庫連接選項。

針對這一問題,Oracle 為 .NET(ODP.NET) 專門編寫了 Oracle Data Provider,一個用于 Microsoft .NET 環境下的 Oracle 數據訪問 API。在本文中,我們將討論 ODP.NET 的用法、特性和對性能的改善。我們發現使用 ODP.NET 確實具有一些顯著的優勢。

如果用ODP.NET來訪問ORACLE數據庫,需要滿足以下條件:

l  操作系統WIN XP 2003;

l  .NET FRAMEWORK 1.0以上;

l  ORACLE9I以上的客戶端。

連接字符串格式:
Data Source = MyOracleDB; User Id = myUsername; Password = myPassword; Integrated Security = no;

7.2 在JAVA環境下訪問Oracle

在Java環境下主要通過JDBC連接Oracle。連接方式主要有兩種。

(1)使用JDBC thin連接

thin是for thin client的意思,這種驅動一般用在運行于WEB瀏覽器中的JAVA程序。它不是通過OCI or Net8,而是通過Javasockets進行通信,是純java實現的驅動,因此與平臺無關,不需要在使用JDBC Thin的客戶端機器上安裝Oracle客戶端軟件,只需要下載一個thin驅動的jar包,并且將環境變量中的CLASS_PATH變量中加入thin驅動的路徑就可以了。所以有很好的移植性,通常用在web開發中。

Thin驅動雖然與平臺無關,也無需安裝Oracle客戶端,但是有一個致命的缺陷就是性能一般,達不到如OCI方式的企業級的要求。另外,如果一個oracle數據庫對應一臺主機,可以使用thin連接;如果一個oracle數據庫對應四五臺主機(集群服務器),使用thin時,需要把tnsnames.ora文件中的相關數據庫的整個連接字符串都拷貝下來,如此才能連接上oracle集群數據庫。

設置連接字符串是固定的寫法,如下所示:

Class.forName("oracle.jdbc.driver.OracleDriver");Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@10.87.134.107:1521:ora9", "sms", "zzsms");

在上面的連接字符串中,如果不是集群數據庫就在@后直接輸入數據庫IP地址即可;如果是集群數據庫,則需要在@后輸入tnsnames.ora文件中有關該數據庫的所有描述內容(通常是=后邊的所有的內容)。

(2)使用JDBC OCI連接

OCI是oracle call interface的縮寫,此驅動類似于傳統的ODBC驅動。因為它需要Oracle Call Interface and Net8,所以它需要在運行使用此驅動的JAVA程序的機器上安裝客戶端軟件,其實主要是用到oracle客戶端里以dll方式提供的oci和服務器配置。

使用OCI連接數據庫是企業級的做法,適應于單個數據庫和集群數據庫,性能優越,尤其是連接池功能大大提高了應用程序的性能和并發量。唯一的缺點是,若想使用OCI必須要安裝Oracle客戶端。

安裝完Oracle客戶端后,里面有個jdbc的文件夾,該文件夾下就包含了OCI驅動和THIN驅動。所以是不需要去網上下載的。這個驅動在jdbc/lib文件夾下,主要有classes12.jar、nls_charset12.jar等等。其中以12結尾的驅動包適應于jdk1.1以上的版本。以11結尾的適應于jdk1.1以下的版本。文件名中含有classes的jar包就是驅動程序,文件名中含有nls的jar包是與國際化有關的類。

找到文件后,就需要把class和nls的jar包的絕對路徑加入CLASS_PATH環境變量,否則會報ClassNotFound的異常。

設置環境變量后,就可以直接使用OCI驅動了。不要被“驅動”兩個字嚇壞了,驅動就是一個可執行文件和一個連接字符串。很簡單,無非是連接字符串的問題。標準的連接字符串如下所示:

Class.forName("oracle.jdbc.driver.OracleDriver");Connection con = DriverManager.getConnection("jdbc:oracle:oci:@xxzc","duansiyuan", "oracle_password");

只要這兩行,就可以保證連接到數據庫,而這個數據庫不管是單個數據庫還是集群數據庫。其中xxzc就是數據庫名,duansiyuan就是用戶名,oralce_password就是密碼。這種方式和C#中的方式比較類似。

需要注意的問題:

1、oracle_home/jdbc文件夾下有大量的樣板代碼和幫助文檔,里面對如何安裝和使用jdbc都有詳細的說明,請引起高度重視并耐心閱讀。里面有很多知識僅通過自己反復的實踐是無法獲取的。

2、如果想要高性能,請使用OCI連接,如果不想裝Oracle客戶端,請使用thin連接。

參考資料

[1] ODBC、OLE DB、ADO的區別,http://blog.csdn.net/yinjingjing198808/article/details/7665577

[2] ADO與ADO.NET的區別與介紹,http://www.jb51.net/article/34121.htm

[3] ADO和ADO.NET的區別,http://blog.csdn.net/luckyzhoustar/article/details/24770423

[4] JDBC和ODBC,http://www.tongji.edu.cn/~yangdy/database/paper6.htm

[5] 使用 ODP.NET 訪問 Oracle http://www.oracle.com/technetwork/cn/testcontent/o23odp-084525-zhs.html


上一篇:MongoDB

下一篇:Postgresql

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 即墨市| 荆门市| 怀集县| 汉阴县| 通山县| 从化市| 九台市| 广南县| 安塞县| 大方县| 汤原县| 杭州市| 福海县| 广州市| 清远市| 大埔县| 名山县| 藁城市| 四子王旗| 海阳市| 米脂县| 武冈市| 太仓市| 比如县| 年辖:市辖区| 新河县| 和政县| 沾化县| 龙游县| 合江县| 伊通| 西峡县| 新营市| 句容市| 思茅市| 无棣县| 页游| 共和县| 龙泉市| 金秀| 永年县|