1. 程式人生 > >比較ole db/odbc/ado/ado.net/jdbc

比較ole db/odbc/ado/ado.net/jdbc

資料庫連線方式各式各樣,如何取捨,如何區分? 讓人很是迷惑,只有理解各種方式異同後,方能做出正確選擇。

1. 如何理解?

    最早:資料庫程式設計都是直接操作資料庫廠商提供的API,每個資料庫廠商的提供的資料庫操作的API都不相同,如呼叫函式,操作語句等等。因此每個應用程式都只能對應一個數據庫。如果想換資料庫,需要重寫一遍資料庫操作程式碼,這樣的代價是非常大的。

  後來:微軟開發的ODBC結束了直接呼叫資料庫API進行資料庫操作的方式.ODBC將所有資料庫特定的,底層的操作細節(CLI)封裝在驅動(drive)中,並提供一套標準的函式呼叫。使用時,ODBC會動態地載入資料庫的CLI,將函式呼叫轉換成各個資料庫的CLI呼叫。這樣應用程式與資料庫API本身就隔絕開了,如下圖所示。這樣訪問所有的關係型資料庫都可以使用一套標準的ODBC API即可。ODBC成為最早的通用資料庫訪問技術。

    

  再後來:隨著面嚮物件的技術的發展,微軟又推出了OLE DB。 在OLE DB中,將不會有drive的概念,取而代之的是提供者(provider),每個資料庫廠商都需要物件的OLE DB provider。需要注意的是,provider實現了基於COM的介面,這些介面封裝了訪問資料庫的操作細節(CLI)。那麼應用程式使用這些通用的介面來進行資料庫的訪問,而不用考慮資料庫的細節。所以,可以理解OLE DB是規定了資料使用者和提供者之間達成了一種協議。請參考下圖。    

前面所述的是提供了provider的資料庫。為了相容一些沒有提供provider的資料庫,OLEDB也可以基於ODBC,即provider是基於ODBC實現的。這種實現會經過兩層,效率會比較低。由於目前大多數資料庫都提供了provider,所以這種方式比較少見。 可以看到,OLE DB與ODBC類似,但是原理上是不相同的。還有一點就是,ODBC只支援關係型資料庫,而OLE DB除了關係型資料庫外,還支援Excel等。

  再再後來,微軟為了簡化OLE DB介面,推出了ADO來封裝OLE DB的介面,實現與資料庫的通訊,使得使用者更易於呼叫資料庫相關操作。隨著.NET推出,微軟進一步進行升級ADO為ADO.NET。 

     

JDBC跟上面幾種資料庫連線技術不太相同,它是面向JAVA的,是種用於執行SQL語句的Java API。下面會詳細闡述JDBC與其他幾種技術的異同。

2. odbc vs jdbc

   1/ ODBC 是採用C語言開發的,而JDBC是由JAVA語言開發的,那麼在易用性上,JDBC將更加簡單。ODBC API比較繁瑣,而且不易使用。

   2/ ODBC在使用時,需要進行一定的配置才能使用,如windows上在控制面板中配置ODBC資料來源等,而JDBC不需要,只需在編碼時,指定相關的配置即可。

   3/ JDBC提供了一種JDBC-ODBC橋接的驅動程式,用於移植ODBC程式到JDBC上,這種方式效率會受影響,一般建議直接用JDBC重寫資料庫操作。

3. ado.net vs jdbc(請參考http://www.cnblogs.com/jobs/archive/2004/07/28/27870.aspx)

   從選擇的角度上來看,這兩種資料庫操作方式比較其實是.NET平臺和JAVA平臺的比較,依賴與應用程式本身採用哪種平臺。如果是JAVA應用,則首選JDBC,如果是.NET應用程式,首選ADO.NET。從應用的角度上來看,兩者也有一些差別:

   1/ ADO .NET最大的優點是對斷開連線訪問資料庫方式的強有力支援。相比起來,JDBC也引入類似的功能,RowSet,但是比起ADO .NET來,還是不夠/

   2/ ADO .NET功能不完整。MS對這一點也是承認的,承認ADO .NET不能替代ADO。其中一個很重要的功能是分頁訪問資料的支援。以前在開發ADO .NET程式時,還專門編寫一個程式,呼叫ADO,分頁獲取資料。

   3/ 跨平臺性上,JDBC更好。因為JDBC是一個規範,是一個標準,而ADO .NET只是微軟的私家類庫。.NET Framework目前成為標準的類庫還只有一小部分。

歡迎批評指正!

忍者職業