資料存取

维基百科,自由的百科全书
跳转至: 导航搜索

資料存取 (Data Access),是應用程式連結到資料來源 (Data Source) 存取資料的一種行為 (Behavior),在大多數的應用程式中,經常會需要使用到資料,而這些資料可能來自很多不同類型的來源,像是資料庫 (Database),網路資料來源,本機檔案,或是異質性的來源 (例如在 Mainframe 上的 IBM DB2 資料庫),經由一層 (或多層) 中介程式碼或中介軟體 (Middleware) 進入資料來源中,並且取出資料後送回應用程式中來處理。

標準[编辑]

資料存取通常會依資料來源的不同,而會出現不同的存取方法,例如早期 SQL Server 的 DB-Library,這些介面通常只能由 C/C++ 程式語言來呼叫,而且各個資料庫都有各自獨立的 API。但開發工具與軟體廠商開始相繼的提供一致的介面標準,由資料庫廠商開發出基於介面標準的 API,以方便應用程式開發人員發展資料庫應用程式 (Database Application)。

ODBC[编辑]

ODBC (Open Database Connectivity) 是由 SQL Access Group,X/Open (目前為 The Open Group 的一部份) 以及 ISO/EIC 所提出的 Call Level Interface (CLI) (呼叫層次介面) 介面規格[1],由微軟開發出第一份 ODBC 的實作,每一個資料庫都可以實作出連結自家資料來源的 ODBC 驅動程式 (Driver),而應用程式開發人員能夠利用 ODBC 所開放的 API 呼叫,經由 ODBC Driver 來進入資料庫進行存取以及處理工作。

ODBC 現在已經是大多數平台上的共同資料存取標準,並且後續由各軟體廠商提出的資料存取規格,多數都和 ODBC 有類似的規格。

JDBC[编辑]

與 ODBC 類似,由昇陽在 JDK 1.1 中建立的專屬 Java 程式語言的資料存取規範[2],各家資料庫可以實作 JDBC Driver 介面提供資料來源的功能,而應用程式開發人員可利用 Java 所提供的 JDBC API (java.sql 與 javax.sql 封裝) 來呼叫 JDBC 類別物件,再由 JDBC 類別物件來呼叫 JDBC Driver 連到資料庫中。

目前最新版本為 JDBC 4.0 (於 Java SE 6.0 中)

OLE DB[编辑]

Microsoft提出的類似 ODBC 的資料庫存取規格,但它是使用 COM 以及 Provider-Based 模型來建構,OLE DB 規格[3]中定義了許多的介面,由資料庫提供者 (database provider) 來實作這些介面,應用程式開發人員則直接利用 COM 呼叫這些 OLE DB 介面來連接與存取資料。但 Microsoft 也實作了可以橋接 ODBC Driver 的提供者:OLE DB Provider for ODBC,在微軟 Windows 應用平台中被大量使用於資料存取中。與 JDBC 不同的是 JDBC 是屬於 Java 程式語言的專屬規格,但 OLE DB 可以被能夠呼叫 COM 介面的任何程式語言使用。

OLE DB 也是 ADO 以及 ADO.NET 的核心基礎,而這些 API 目前也被廣為用在微軟 Windows 應用平台中。

原理[编辑]

大多數資料存取的介面規格都是由連線 (Connection)命令 (Command),以及資料集 (Resultset)三個部份構成。

連線[编辑]

連線是由應用程式透過呼叫資料存取提供介面提供的函式,以連線的必要資訊為主,與資料庫之間所建立的一條實體資料連結,連結的方式要視資料庫以及資料庫所在位置而定,這些連線所需要的必要資訊,通常都會定義在一組字串中,此字串即稱為連線字串 (Connection String)[4],連線字串在 JDBC 與 OLE DB 的應用程式中隨處可見。

一個典型的連線字串如下:

OLE DB for ODBC:
Driver={mySQL};Server=myServerAddress;Option=131072;Stmt=;Database=myDataBase; User=myUsername;Password=myPassword;
 
OLE DB for SQL Native Client:
Provider=SQLNCLI;Server=myServerName\theInstanceName;Database=myDataBase;Trusted_Connection=yes;

當連線開啟到關閉之間,應用程式可以利用命令來呼叫或存取資料來源中的資料,但不同的應用程式類型,控制資料庫連線生命期的方式也不同,例如在網站類型的應用程式 (Web Application) 中,為了不讓資料庫的資源在多人環境下被鎖定太久,因此連線通常只會在實際執行資料存取前才會打開,在存取完成後立刻關閉。

命令[编辑]

命令是由應用程式經由連線送入資料來源的指令或資料,通常是 SQL 指令(或預存程序)以及其參數,或者是由資料來源所支援的其他控制碼等,命令送入資料庫執行後,視命令類型來決定會不會傳回資料集,像是 SQL 的 SELECT 指令會傳回結果集,而 INSERT, UPDATE, DELETE 會回傳受影響的列數 (可以由資料庫控制不傳回)。

資料集[编辑]

資料集是由命令送入資料來源後所傳回,帶有結果資料錄的集合,資料集可視為一個小型的資料表格,資料存取介面也提供資料集瀏覽的 API 來讓應用程式存取並使用資料集中的資料,大多數資料集的瀏覽介面都是由高階的 API 來提供,例如 ADO 是由 Recordset 來封裝,JDBC 由 Resultset 來封裝,而 ADO.NET 則是用 DataReader 來封裝。

部份資料集介面也提供在不與資料庫連線下存取的暫存資料集服務,例如 ADO.NET 中的 DataTable,DataSet 等。

参考文献[编辑]