跳转到内容

数据访问

本页使用了标题或全文手工转换
维基百科,自由的百科全书

资料存取 (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).