數據庫訪問方式


數據庫訪問方式

異構數據庫系統混合查詢—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):根據應用程序需要加載/卸載驅動程序,處理ODBC函數調用,或把它們傳送到驅動程序。

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的開頭字符表明了他們支持的協議。

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數據等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM