1.3 数据库访问技术

1.3 数据库访问技术

伴随着数据库的不断发展,同时出现了很多种数据库访问技术,比较具有代表性的是以下几种技术。

1.ODBC技术

ODBC(Open Database Connectivity,开放数据库互联)是微软公司开放服务结构(Windows Open Services Architecture,WOSA)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

ODBD通过引进ODBC驱动,将其当作应用程序,与DBMS的中间翻译层一起来实现ODBC接口与DBMS的无关性。实现了ODBC接口的应用程序可以访问任何安装了ODBC驱动的DBMS。

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源。管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

在64位系统中打开ODBC管理器的方法为:

①查看兼容的32位ODBC驱动:启动C:\WINDOWS\SysWOW64\odbcad32.exe。

②查看64位ODBC驱动,启动C:\WINDOWS\system32\odbcad32.exe或者“控制面板”→“管理工具”→“数据源(ODBC)”。

2.OLE-DB技术

随着数据源日益复杂化,现今的应用程序很可能需要从不同的数据源取得数据加以处理,再把处理过的数据输出到另外一个数据源中。更麻烦的是,这些数据源可能不是传统的关系数据库,而可能是Excel文件、E-mail、Internet/Intranet上的电子签名信息。Microsoft为了让应用程序能够以统一的方式存取各种不同的数据源,在1997年提出了Universal Data Access(UDA)架构。UDA以COM技术为核心,协助程序员存取企业中各类不同的数据源。UDA以OLE-DB(属于操作系统层次的软件)作为技术的骨架。OLE-DB定义了统一的COM接口作为存取各类异质数据源的标准,并且封装在一组COM对象之中。借由OLEDB,程序员就可以使用一致的方式来存取各种数据。但OLE-DB仍然是一个低层次的,利用效率不高。由于OLE-DB和ODBC标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE-DB是不是替代了ODBC的新标准?答案是否定的。实际上,ODBC标准的对象是基于SQL的数据源(SQL-Based Data Source),而OLE-DB的对象则是范围更为广泛的任何数据存储。从这个意义上说,符合ODBC标准的数据源是符合OLE-DB标准的数据存储的子集。

3.ADO技术

虽然OLE-DB允许程序员存取各类数据,是一个非常良好的架构,但是由于OLE-DB太底层化,并且在使用上非常复杂,需要程序员拥有高超的技巧,因此只有少数的程序员才有办法使用OLE-DB。这让OLE-DB无法广为流行。为了解决这个问题,并且让VB和脚本语言也能够借由OLE-DB存取各种数据源,Microsoft同样以COM技术封装OLE-DB为ADO对象(这一步是很重要的,实现了多种程序可以互相调,并且可以开发的语言也丰富了),简化了程序员数据存取的工作。由于ADO成功地封装了OLE-DB大部分的功能,并且大量简化了数据存取工作,因此ADO也逐渐被越来越多的程序员所接受。

4.ADO.NET技术

ADO和ADO.NET的目的都是为编写数据源访问程序提供支持,但它们是两种完全不同的技术。ADO使用OLE-DB接口并基于微软的COM技术,而ADO.NET基于微软的.NET体系架构,拥有自己的ADO.NET数据库访问接口。众所周知,.NET体系不同于COM体系,ADO.NET接口也就完全不同于ADO和OLE DB接口,这也就是说,ADO.NET和ADO是两种数据访问方式。

在开始设计.NET体系架构时,微软就决定重新设计数据访问模型,以便能够完全基于XML和离线计算模型。两者的区别主要有:

①ADO以Recordset存储,而ADO.NET则以DataSet存储。Recordset看起来更像单表,如果让Recordset以多表的方式表示,就必须在SQL中进行多表连接。反之,DataSet可以是多个表的集合。

②ADO的运作是一种在线方式,这意味着不论是浏览还是更新数据,都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候,ADO.NET会利用XML制作数据的一份副本,ADO.NET的数据库连接也只有在这段时间需要在线。

③由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范;而ADO.NET基于XML格式,数据类型更为丰富,并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。

5.JDBC技术

JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

JDBC与ODBC一样,也是很底层的接口,可以直接调用SQL命令。在它之上可以建立高级接口和工具。高级接口是“用户友好”的接口,它使用的是一种更易理解和更为方便的API,这种API在幕后被转换为诸如JDBC这样的低级接口。

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语句同时访问多个异构的数据库,为异构的数据库之间的互操作奠定基础。

6.ODAC

ODAC全称Oracle数据访问组件(Oracle Data Access Components),是由Oracle官方提供的在.NET环境下进行Oracle数据库编程的一套工具组件。ODAC完全包括了开发所用的组件,例如ODP.NET、ODT、Oracle Provider for OLE DB等工具。

其中,ODP.NET提供了比ADO.NET更为优化的Oracle数据库访问功能。