資料庫訪問方式
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
資料庫訪問方式
異構資料庫系統混合查詢—JDBC/ODBC
異構資料庫系統是由多個異構的成員資料庫系統組成的資料庫系統,異構性體現為各個成員資料庫之間在硬體平臺、作業系統或資料庫管理系統等方面的不同。
Internet上大量資訊通過資料庫系統可以得到有效的管理。由於歷史等原因,Internet上的資料庫系統不少是異構的。為了在Internet環境下,基於異種系統平臺實現對異構資料庫的查詢和聯合使用,必須提供一個獨立於特定的資料庫管理系統的統一程式設計介面。
目前許多資料庫系統均支援SQL,對於由SQL資料庫組成的異構資料庫系統,JDBC和ODBC為訪問其異構成員提供了統一的方式,也為各異構成員之間的協作和多個成員之上的操作打下了基礎。下文簡單介紹了JDBC和ODBC對各個異構的資料庫進行統一訪問和協作的原理及其應用。
ODBC
ODBC(Open DataBase Connectivity)是微軟倡導的、當前被業界廣泛接受的、用於資料庫訪問的應用程式程式設計介面(API),它以X/Open和 ISO/IEC的呼叫級介面(CLI)規範為基礎,並使用結構化查詢語言(SQL)作為其資料庫訪問語言。 ODBC總體結構有四個元件:
A. 應用程式:執行處理並呼叫ODBC API函式,以提交 SQL語句並檢索結果。
B. 驅動程式管理器(Driver Manager):
C. 驅動程式:處理ODBC函式呼叫,提交SQL請求到一個指定的資料來源,並把結果返回到應用程式。如果有必要,驅動程式修
改一應程式請求,以使請求與相關的DBMS支援的語法一致。
D. 資料來源:包括使用者要訪問的資料及其相關的作業系統、DBMS及用於訪問DBMS的網路平臺。
ODBC驅動程式的使用把應用程式從具體的資料庫呼叫中隔離開來。
驅動程式管理器針對特定資料庫的各個驅動程式進行集中管理,並嚮應用程式提供統一的標準介面,這就為ODBC的開放性奠定了基礎。
資料庫獨立性
ODBC是為最大的互用性而設計的,要求一個應用程式有用相同的原始碼(不用重新編譯或重新連結)訪問不同的資料庫管理系統(DBMS)的能力。
ODBC定義了一個標準的呼叫層介面(CLI)。這包含 X/Open和ISO/IEC的CLI規範中的所有函式,並提供應用程式普遍需要的附加函式。每個支援ODBC的DBMS需要不同的庫或驅動程式,驅動程式實現ODBC API中的函式。當需要改變驅動程式時,應用程式不需要重新編譯或者重新連結,只是動態載入新的驅動程式,並呼叫其中的函式即可。如果要同時訪問多個DBMS系統,應用程式可載入多個驅動程式。如何支援驅動程式取決於作業系統,例如,在Windows作業系統上,驅動程式是動態連結庫(DLL)。使用相同原始碼的應用程式訪問不同的DBMS,體現了 ODBC的資料庫獨立性。
對資料庫特殊功能的支援
各個DBMS參照的標準、提供的功能不盡相同,應用程式如何以統一的介面使用各個DBMS特有的功能呢?
一方面,ODBC為所有DBMS功能都定義了公共介面。這些DBMS功能比多數DBMS支援的更多,但只要求驅動程式實現這些功能的一個子集。另一方面,ODBC定義了API和SQL語法一致層,它規定驅動程式應支援的基本功能。 ODBC還提供兩個函式(SQLGetInfo和SQLGetFunctions)返回關於驅動程式和DBMS能力的一般資訊及驅動程式支援的函式列表。因此,應用程式可以檢查DBMS支援的特殊功能。
這樣,編寫應用程式時,就可以檢查並自動使用各個驅動程式對應的DBMS所支援的特殊功能。這樣做的優點是當增加DBMS支援的功能時,應用程式不需要改變,只需安裝更新的驅動程式,應用程式便可以自動發現並使用這些功能。
互操作能力
通過使用多個驅動程式可以同時訪問多個DBMS系統。 ODBC提供的Driver Manager實現所有的ODBC函式,多數是傳遞呼叫給驅動程式中的ODBC 函式,並靜態連結應用程式,或在應用程式執行時載入它。這樣,應用程式在Driver Manager 中按名呼叫驅動ODBC函式,而不是通過每個驅動程式中的指標。當應用程式需要通過特定的驅動程式時,它首先需要一個標識驅動程式的連線控制代碼。Driver Manager載入驅動程式,並存儲每個驅動程式中的函式地址。要使驅動程式呼叫一個ODBC函式,可在應用程式呼叫 Driver Manager中的函式,併為驅動程式傳送連線控制代碼,然後Driver Manager使用以前儲存的地址來呼叫函式。
ODBC可以同時連線到多個DBMS,解決了同時訪問多個DBMS的問題,提供了異構成員資料庫之間互操作的能力。
JDBC
JDBC(Java DataBase Connectivity)是Java與資料庫的介面規範,JDBC定義了一個支援標準SQL功能的通用低層的應用程式程式設計介面(API),它由Java 語言編寫的類和介面組成,旨在讓各資料庫開發商為Java程式設計師提供標準的資料庫API。 JDBC API定義了若干Java中的類,表示資料庫連線、SQL指令、結果集、資料庫元資料等。它允許Java程式設計師傳送SQL指令並處理結果。通過驅動程式管理器,JDBC API可利用不同的驅動程式連線不同的資料庫系統。
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語句同時訪問多個異構的資料庫,為異構的資料庫之間的互操作奠定基礎。
但是,JDBC除了具有ODBC的上述特點外,更具有對硬體平臺、作業系統異構性的支援。這主要是因為ODBC使用的是C語言,而JDBC使用的是Java語言。Java語言具有與平臺無關、移植性強、安全性高、穩定性好、分散式、面向物件等眾多優點,而JDBC確保了“100%純Java”的解決方案,利用Java的平臺無關性, JDBC應用程式可以自然地實現跨平臺特性,因而更適合於Internet上異構環境的資料庫應用。
此外,JDBC驅動程式管理器是內建的,驅動程式本身也可通過Web瀏覽器自動下載,無須安裝、配置;而ODBC驅動程式管理器和ODBC驅動程式必須在每臺客戶機上分別安裝、配置。
JDBC和ODBC在Internet上的應用
JDBC和ODBC由於具有資料庫獨立性甚至平臺無關性,因而對Internet上異構資料庫的訪問提供了很好的支援。
在Internet上訪問資料庫通常採用三層模式。以JDBC為例,在三層模式中客戶端的Java Applet主要作為使用者介面,它不直接與資料庫交換資訊,而是通過自定義的應用層網路協議與應用伺服器互動,應用伺服器通過JDBC與資料庫伺服器交換資訊,並實現應用邏輯。DM3的JDBC和ODBC驅動程式支援目前流行的ASP和JSP技術,可以分別藉助ODBC和JDBC同時訪問Internet上多個異構的資料庫。
ASP是面向Web伺服器的技術,客戶端瀏覽器不需要任何附加的軟體支援。ASP使用VBScript之類的指令碼語言,它在HTML程式碼中嵌入某種程式程式碼,由HTML程式碼負責描述資訊的顯示樣式,由嵌入的程式程式碼來描述處理邏輯。在ASP 下,VBScript程式碼被ASP引擎在Web伺服器端解釋執行,執行結果被重新嵌入到HTML程式碼中,然後一起傳送給瀏覽器。這裡,VBScript程式碼可以通過ODBC訪問多個異構的資料庫。
JSP是一種基於Java Servlet的Web開發技術,它和ASP 非常相似,但又有區別:在JSP下,嵌入HTML頁面的程式程式碼是Java程式碼;頁面中嵌入的程式程式碼被編譯成Servlet(這種編譯操作僅在對JSP頁面的第一次請求時發生)並由Java 虛擬機器執行。這裡Java程式碼可以通過JDBC訪問多個異構的資料庫,其平臺無關性特別好。當前,Internet上的資料庫應用已越來越多,JDBC和ODBC必將在Internet上的異構資料庫訪問中發揮重要的作用。
微軟了的資料訪問方式歷史演變
ODBC(Open Database Connectivity):
是Microsoft公司開發和定義的一套資料庫訪問標準,稱為開放資料庫系統互聯。ODBC提供了一種程式設計介面,可以使用一個ODBC應用程式訪問各種資料庫管理系統,例如Access、MySQL、DB2、FoxPro、SQL Server和Oracle等,它是第一個使用SQL訪問不同關係資料庫的資料訪問技術。使用ODBC應用程式能夠通過單一的命令操縱不同的資料庫,而開發人員需要做的僅僅只是針對不同的應用加入相應的ODBC驅動。
DAO(Data Access Objects):
不像ODBC那樣是面向C/C++程式設計師的,它是微軟提供給Visual Basic開發人員的一種簡單的資料訪問方法,但不提供遠端訪問功能。
RDO(Remote Data Object):
在使用DAO訪問不同的關係型資料庫的時候,Jet引擎不得不在DAO和ODBC之間進行命令的轉化,導致了效能的下降,而RDO(Remote Data Objects)的出現就順理成章了。
OLE DB(Object Linking and Embedding DataBase):
OLE DB(物件連結和嵌入資料庫)隨著越來越多的資料以非關係型格式儲存,需要一種新的架構來提供這種應用和資料來源之間的無縫連線,基於COM(Component Object Model)的OLE DB應運而生了。
ADO(ActiveX Data Object):
基於OLE DB之上的ADO更簡單、更高階、更適合Visual Basic程式設計師,同時消除了OLE DB的多種弊端,取而代之是微軟技術發展的趨勢。
ADO.NET
是一種基於標準的程式設計模型,可以用來建立分散式應用以實現資料共享。在ADO.NET中,DataSet佔據重要地位,它是資料庫裡部分資料在記憶體中的拷貝。與ADO中的RecordSet不同,DataSet可以包括任意個數據表,每個資料表都可以用於表示自某個資料庫表或檢視的資料。DataSet駐留在記憶體中,且不與原資料庫相連,即無需與原資料庫保持連線。完成工作的底層技術是XML,它是DataSet所採用的儲存和傳輸格式。在執行期間,元件 (如某個業務邏輯物件或asp.net web表單)之間需要交換DataSet中的資料。資料以XML檔案的形式從一個元件傳輸給另一個元件,由接收元件將檔案還原為DataSet形式。DataSet的有關方法與關係資料模型完全一樣
因為各個資料來源的協議各不相同,我們需要通過正確的協議來訪問資料來源。有些比較老的資料來源用ODBC協議,其後的一些資料來源用OleDb協議,現在,仍然還有許多新的資料來源在不斷出現,ADO.NET提供了訪問資料來源的公共方法,對於不同的資料來源,它採用不同的類庫。這些類庫稱為Data Providers,並且通常是以資料來源的型別以及協議來命名的
ADO.NET Data Providers是一組提供訪問指定資料來源的基本類庫。API的開頭字元表明了他們支援的協議。
Provider |
API 字首 |
資料來源描述 |
ODBC Data Provider |
Odbc |
提供ODBC介面的資料來源。一般是比較老的資料庫。 |
OleDb Data Provider |
OleDb |
提供OleDb介面的資料來源,比如Access或Excel。 |
Oracle Data Provider |
Oracle |
Oracle資料庫 |
SQL Data Provider |
Sql |
Microsoft SQL Server資料庫 |
Borland Data Provider |
Bdp |
通用的訪問方式能訪問許多資料庫,比如Interbase、SQL Server、IBM DB2和Oracle。 |
這些資料庫連線方式ODBC,DAO,RDO,OLE DB,ADO,ADO.NET都是基於oracle客戶端(oracle OCI),中間通過SQL*Net與資料庫通訊。如果為了追求效能,可以自己開發最適合自己資料庫連線方式。
Java程式連線資料庫的方式
Java程式連線資料庫的方式有三種方式:OCI方式、thin方式和JdbcOdbc橋方式
1. OCI方式
這種實現方法是直接使用資料庫廠商提供的用專用的網路協議建立的驅動程式,通過它可以直接將JDBC API呼叫轉換為直接網路呼叫。這種呼叫方式一般效能比較好,而且也是實用中最簡單的方法。因為它不需要安裝其他的庫或中介軟體。幾乎所有的資料庫廠商都為他們的資料庫提供了這種資料庫提供了這種JDBC驅動程式,也可以從第三方廠商獲得這些驅動程式。
應用程式---JDBC API---驅動程式---資料來源
2. Thin方式
thin方式是純java實現tcp/ip的通訊,而oci方式,客戶端通過native java method呼叫c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle客戶端安裝
oracle jdbc oci方式是用java與c兩種語言編寫的,把jdbc call呼叫,轉換成c呼叫,通過SQL*Net與資料庫通訊。而oracle jdbc thin驅動方式全採用java編寫,使用jvm統一管理記憶體,也是通過SQL*Net與資料庫通訊。
3. JdbcOdbc橋方式(用於windows平臺)
JDBC-ODBC橋接器是用JdbcOdbc.Class和一個用於訪問ODBC驅動程式的本地庫實現的。
由於JDBC在設計上與ODBC很接近。在內部,這個驅動程式把JDBC的方法對映到ODBC呼叫上,這樣,JDBC就可以和任何可用的ODBC驅動程式進行互動了。這種橋接器的優點是,它使JDBC目前有能力訪問幾乎所有的資料庫。通行方式如下所示:
應用程式--->JDBC API--->JDBC-ODBC--->ODBC API--->ODBC層--->資料來源
事務控制
無論是java,還是.net都是支援事務控制的,事務是為解決資料安全操作提出的,事務控制實際上就是控制資料的安全訪問
事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和永續性(durability)的縮寫。
原子性:表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。
一致性:表示當事務執行失敗時,所有被該事務影響的資料都應該恢復到事務執行前的狀態。
隔離性:表示在事務執行過程中對資料的修改,在事務提交之前對其他事務不可見。
永續性:表示已提交的資料在事務執行失敗時,資料的狀態都應該正確。
Java事務的型別有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。
.net事務分為本地事務和分散式事務
jdbc/odbc主要優化方式:
1.選擇正確的jdbc/odbc驅動程式
2.Connention的優化 使用連線池來管理Connection物件
3.Statement的優化 使用批量更新等
4.Result的優化 正確的從資料庫中get資料等
-------end------