资料存取 (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 等。

参考文献 编辑

  1. ^ ODBC Standard. [2008-08-27]. (原始内容存档于2012-02-04). 
  2. ^ Java SE Technologies - Database. [2008-08-27]. (原始内容存档于2009-08-06). 
  3. ^ Microsoft OLE DB. [2008-08-27]. (原始内容存档于2017-07-23). 
  4. ^ ConnectionStrings.com. [2008-08-27]. (原始内容存档于2021-01-26).