浅析ODBC
2014-07-28郭敏
郭敏
摘 要:介绍了应用程序通过ODBC访问各种数据源的核心技术,研究了ODBC的结构,讨论了ODBC技术和OLE DB和ADO技术关系,JAVA访问数据库的JDBC技术。
关键词:ODBC;数据源;OLD DB;ADO JDBC
数据库技术无处不在,从最初的报表统计数据到现在的动态网页、多数据源的程序设计都有数据库技术的影子。随着科学技术的发展,数据库技术自身也在不断地发展,逐渐形成了多种成熟的数据格式,主要有:SQL Server、Access、dBase、FoxPro、Excel、Oracle以及Microsoft Text。面对这么多的数据库格式,它们内部结构都分别不一样,自然各自的访问方式也都不一样。现在,程序员不需要分别开发面向不同数据库格式的程序,因为ODBC技术已为我们作好了这方面的准备工作。
一、什么是ODBC
ODBC(Open Database Connectivity) 是”开放数据库互连”的简称,是一种使用SQL的应用程序接口(API),是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库,用它生成的程序与数据库或数据库引擎是无关的。ODBC可使程序员方便地编写访问各DBMS厂商的数据库的应用程序,而不需了解其产品的细节。
二、ODBC的结构
一个完整的ODBC如图1所示。
1. 应用程序。对外提供使用者交谈界面,对内执行资料之准备工作数据库系统所传回来的结果在显示给使用者看,它可以用支持ODBC技术的任何一门语言编写。
2.驱动程序管理器(Driver Manager)。ODBC管理器位于Windows控制面板(Control Panel)的32位ODBC内,包含在ODBC32.DLL中,它对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。提供从主机语言到特定后端数据源驱动程序的接口。
3. ODBC API。数据库厂商为程序设计者提供的直接访问数据库的一组函数。
4. ODBC 驱动程序。也是一个动态链接库 (DLL)。应用程序通过调用驱动程序所支持的函数来操纵具体的数据源。
5. 数据源。作为数据源使用的数据库或数据库服务器。ODBC数据源通过它们的数据源名称来引用,或者通过具体引用ODBC驱动程序和服务器名称来引用。可以在 Windows 的控制面板中使用ODBC管理程序或rdoRegisterDataSource (一个ODBC API)方法来注册命名的数据源。
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
Windows的控制面板中数据源管理器如图2所示,用启单击“添加”按纽就可以添加不同格式的数据源,图2中已添加了四种不同类型的数据源。
在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
在访问ODBC数据源时需要ODBC驱动程序的支持。ODBC是为调用关系数据库提供统一途径的一类API。
三、ODBC的发展
1. OLE DB。随着数据源的日益多样化,现今的应用程序很可能需要从不同的数据源取得数据,加以处理,再把处理过的数据输出到另外一个数据源中。更麻烦的是这些数据源可能不是传统的关系数据库,而可能是非关系型信息源,例如Email,文件系统存储,文本、图形和地理数据以及自定义业务对象。Microsoft为了让应用程序能够以统一的方式存取各种不同的数据源,在1997年提出了UniversalDataAccess(UDA)架构。UDA以COM技术为核心,协助程序员存取企业中各类不同的数据源。UDA以OLE-DB做为技术的骨架。OLE-DB定义了统一的COM接口做为存取各类异质数据源的标准,对各种数据库管理系统服务进行封装,并允许创建软件组件,实现这些服务。OLE DB 组件包括数据提供程序(包含和表现数据)、数据使用者(使用数据)和服务组件(处理和传送数据)。OLE DB 包含了一个连接 ODBC 的“桥梁”,对现用的各种 ODBC 关系型数据库驱动程序提供一贯的支持。但仍然OLEDB是一个低层次的,利用效率不高。
2.ADO。ADO(ActiveX Data Object)动态数据对象。虽然OLE-DB允许程序员存取各类数据,是一个非常良好的架构,但是由于OLE-DB太底层化,而且在使用上非常复杂,需要程序员拥有高超的技巧,因此只有少数的程序员才有办法使用OLE-DB。这让OLE-DB无法广为流行。为了解决这个问题, Microsoft同样以COM技术封装OLE-DB为ADO对象,OLEDB处于ODBC层和应用层之间。ADO是OLEDB上面的一种“应用”。从而简化了程序员数据存取的工作。由于 ADO成功地封装了OLE-DB大部分的功能,并且大量简化了数据存取工作,因此 ADO也逐渐被愈来愈多的程序员所接受。
3. JDBC
Java语言的普及使数据库技术在JAVA语言中的应用也迅速发展起来,JDBC(Java DataBase Connectivity)是JAVA执行SQL语句的Java API,JDBC定义了一个支持标准SQL功能的通用低层的应用程式编程接口(API),他由Java 语言编写的类和接口组成,旨在让各数据库研发商为Java程式员提供标准的数据库API。JDBC API定义了若干Java中的类,表示数据库连接、SQL指令、结果集、数据库元数据等。他允许Java程式员发送SQL指令并处理结果。通过驱动程式管理器,JDBC API可利用不同的驱动程式连接不同的数据库系统。
四、结束语
在ODBC中,应用程序不会直接存取数据库,它必须通过管理器和数据库交换信息。ODBC管理器负责将应用程序的SQL语句及其他信息传递给驱动程序,而驱动程序则负责将运行结果送回应用程序,从而提供了一种不同应用程序对数据库的操作的一种规范,实现了程序员对具体关系型DBMS的访问的“透明性”,而ADO技术则把这种数据类型扩展到了非关系型数据库,并且同现在主流的向对象的编程思想一致,JDBC則是数据库访问技术应用在JAVA语言中的一个典型技术。
参考文献:
[1](美)Kyle Geiger ODBC深入剖析[M] 电子工业出版社 1996.
[2]文必龙,邵庆开放数据库互联(ODBC)技术与应用[M] 科学出版社1997,89-113
[3]David Sceppa ADO编程技术[M] 清华大学出版社2001,21-30
[4](美)泰勒 JDBC数据库编程与J2EE[M] 电子工业出版社 2004,37-58
[5]刘红铄 李晓 基于JDBC数据库查询和发布[J] 计算机应用研究 2000,11