开放式数据库互连(数据库)
时间:2022-12-30 22:30:02 | 来源:信息时代
时间:2022-12-30 22:30:02 来源:信息时代
开放式数据库互连 : 微软开放服务体系中有关数据库访问的一个组成部分,它建立了一组访问数据库的应用编程接口(API)规范。事实上,ODBC是调用级接口(CLI)标准的一个实现,也是一个行业接口标准,它为基于C/C++、C#、BASIC等语言的应用程序提供了一种访问各种数据源的统一的函数调用级接口。
ODBC不仅在Windows平台得到应用,也扩展到其他平台,如Unix。在Windows平台上,ODBC API的实现体现为动态链接库的导出函数,而Unix类平台上则是可动态加载的共享目标文件的导出对象。这些函数库或文件统称为ODBC驱动程序。
ODBC从3.0版趋于稳定,后续版本又增加了对多字节编码、UNICODE、64位编程等技术的支持,最新版本为3.52版。3.x系列修改不大,主要原因之一是微软公司集中发展OLE DB、.NET数据提供者(data provider)等面向对象的数据访问技术。
1.ODBC的基本结构
ODBC借助标准接口实现应用对数据库访问的独立性。驱动程序和具体数据库管理系统有关,但基于ODBC的应用程序对数据库的操作独立于任何DBMS,也不直接与DBMS交互,数据库操作都通过各个ODBC函数完成。一个完整的ODBC应用体系包含应用程序、驱动程序管理器、驱动程序和数据源四个部件(见图1)。
图1 基于ODBC访问数据库
(1)应用程序(application): 定义系统的应用逻辑,管理交互操作,调用ODBC函数向数据库服务器提交数据访问请求,获取结果并进行后续处理。
(2)驱动程序管理器(driver manager):为应用程序加载和调用ODBC驱动程序,负责应用程序和驱动程序的交互控制。应用程序执行ODBC函数时,驱动程序管理器根据应用程序指定的数据源找到相应的驱动程序并进行接口函数绑定。驱动程序管理器也执行部分错误检查,比如检查函数调用格式、空指针等,这些预检查使得调用ODBC函数时,驱动程序能够减少检查工作,降低提供商的工作量。
(3)ODBC驱动程序(ODBC driver): 驱动程序是一个和数据源相关的ODBC函数包,应用程序最终通过驱动程序中的函数操纵指定的数据源。如果操纵不同的数据源则可能要加载不同的驱动程序。
ODBC驱动程序主要分单束和多束。单束一般指数据源和应用程序在同一主机,驱动程序直接访问和管理数据文件,这时的驱动程序相当于数据管理器,如面向文本文件、excel文件的驱动程序等。多束驱动程序支持客户机/服务器、客户机/应用服务器/数据库服务器等多层软件架构的数据访问,通常由驱动程序完成数据库访问请求的提交和结果集接收,应用程序使用驱动程序中的结果集管理接口操纵结果数据。
(4)数据源(data source): 数据源是用户在应用中可存取的数据和相关元数据信息所构成的一个实体。一个有效的数据源需要保存与数据建立连接的信息,可能包括操作系统信息、DBMS的位置、网络配置、文件类型和路径、用户账户和口令等信息,数据源需要维护的信息由ODBC驱动程序提供商规定。数据源通过应用所在主机上的ODBC管理器来建立、管理和撤销,例如Windows和Unix系统分别用ODBC数据源管理器和ODBC Config工具来建立和配置有效的ODBC数据源。
根据能够支持的ODBC接口和标准SQL语句,ODBC驱动程序有两个主要的符合性分类,即: 接口符合性和SQL语法符合性。接口符合性区分驱动程序对ODBC规范标准接口的支持能力,分为核心级、扩展1级和扩展2级。核心级是任何ODBC驱动程序都必须支持的接口。绝大多数交互应用都需要使用核心级的API,X/Open的调用级接口规范也规定必须支持这类接口。SQL语法符合性则划分对SQL标准的符合性程度,分为最小SQL语法、核心SQL语法和扩展SQL语法。所有的ODBC驱动程序必须支持最小SQL语法级别的要求。
2.基本工作流程
应用程序通过ODBC和数据源进行数据交互的一般流程是:
(1)分配句柄:句柄是对某些控制资源的封装。接口函数SQLAllocHandle可以分配环境句柄、连接句柄,也可分别用SQLAllocEnv和SQLAllocConnect申请。
(2)连接数据源: 通过连接句柄建立到指定数据源的连接。ODBC有三种建立连接的方式,即SQLConnect、SQLDriverConnect 和 SQLBrowse Connect。
(3)分配语句句柄: 语句句柄用于控制应用程序和数据源间的数据交互。应用程序提交语句执行请求前用SQLAllocHandle或SQLAllocStmt分配语句句柄。
(4)执行SQL语句:执行SQL语句可采用立即执行或准备执行方式。立即执行使用SQLExecute Direct将SQL语句提交给数据源立即处理。准备执行则包括准备执行计划(SQLPrepare)和完成执行(SQLExecute)。当语句有位置参数时,执行前要用SQLBindParameter进行参数绑定。
(5)处理执行结果: ODBC接口函数执行后,都有返回结果,应用程序需要检查返回代码。如果失败,可以通过SQLGetDiagRec获得更详细的信息。如果有结果集则通过SQLGetData、SQLFetch等多个游标访问函数获取结果数据。
(6)释放语句句柄: 所有SQL语句执行完,退出应用前执行SQLFreeStmt释放连接上分配的所有语句句柄。
(7)关闭数据库连接: 结束数据源访问后,释放ODBC连接从而释放应用在本地和数据库服务器上占用的资源。接口函数SQLDisconnect可以关闭指定的连接。
(8)释放连接和环境句柄: 和分配句柄的过程相反,执行SQLFreeHandle函数释放指定的连接和环境句柄。释放句柄的过程和分配句柄的过程恰好相反,先分配的后释放。SQLFreeConnect和SQLFreeEnv也可以分别释放连接和环境句柄。
3.ODBC的作用
ODBC具有双重约束力: 一方面,规范应用开发。应用开发者基于ODBC访问数据库时,要符合ODBC的规定,不能对DBMS的应用编程接口随意提出要求。另一方面,规范DBMS应用接口。DBMS开发商如果支持ODBC,它提供的API就不能像内置函数库那样随意定制,比如接口参数、返回值、消息报告等规格。因为内置函数库完全由厂商自己定义,会导致应用开发在一定程度上必须迁就DBMS系统的实现,但是如果按照ODBC的要求,DBMS厂商设计API时就必须提供标准的接口规格,应用程序不再过分受制。
ODBC使得开发者能够设计、开发独立于DBMS的应用。应用程序可以利用SQL来完成大部分数据库访问任务,有助于实现应用和数据库的分离,提高应用系统的数据访问透明性、可移植性和开发生产率。