ODBC编程/OLE DB/JDBC编程

本文详细介绍了数据库互连技术,重点讲解了ODBC的工作原理、API基础和数据源管理,展示了其在应用程序与数据库间的桥梁作用。此外,还提及了微软的OLEDB和Java的JDBC,两者作为数据库访问标准,提供与数据库的无缝连接。通过对这三种技术的理解,开发者可以更好地实现跨平台和数据库的互操作性。
摘要由CSDN通过智能技术生成

ODBC编程

  • 使用ODBC编写的应用程序可移植性好,能同时访问不同的数据库,共享多个数据资源。

ODBC概述

  • 提出和产生ODBC(Open Database Connectivity,开放数据库互连)的原因是存在不同的数据库管理系统。
  • 目前广泛使用的关系数据库管理系统有多种,尽管这些系统都属于关系数据库,也都遵循SQL标准,但是不同的系统有许多差异。因此,在某个关系数据库管理系统下编写的应用程序并不能在另一个关系数据库管理系统下运行,适应性和可移植性较差。例如,运行在Oracle上的应用系统要在KingbaseES上运行,就必须进行修改移植。这种修改移植比较烦琐,开发人员必须清楚地了解不同关系数据库管理系统的区别,细心地一一进行修改、测试。
  • 但更重要的是,许多应用程序需要共享多个部门的数据资源,访问不同的关系数据库管理系统。为此,人们开始研究和开发连接不同关系数据库管理系统的方法、技术和软件,使数据库系统"开放",能够实现"数据库互连"。其中,ODBC就是为了解决这样的问题而由微软公司推出的接口标准。ODBC是微软公司开放服务体系(Windows Open Services Architecture,WOSA)中有关数据库的一个组成部分, 它建立了一组规范,井提供一组访问数据库的应用程序编程接口(Application Programming Interface,API)。ODBC具有两重功效或约束力:一方面规范应用开发,另一方面规范关系数据库管理系统应用接口

ODBC工作原理概述

  • ODBC应用系统的体系结构由4部分组成:用户应用程序、ODBC驱动程序管理器、数据库驱动程序、数据源(如关系数据库管理系统和数据库)
  1. 用户应用程序

用户应用程序提供用户界面、应用逻辑和事务逻辑。使用ODBC开发数据库应用程序时,应用程序调用的是标准的ODBC函数和SQL语句。应用层使用ODBC API调用接口与数据库进行交互,使用ODBC来开发应用系统的程序简称为ODBC应用程序,包括的内容有:

  • 请求连接数据库
  • 向数据源发送SQL语句
  • 为SQL语句执行结果分配存储空间,定义所读取的数据格式
  • 获取数据库操作结果或处理错误
  • 进行数据处理并向用户提交处理结果
  • 请求事务的提交和回滚操作
  • 断开与数据源的连接
  1. ODBC驱动程序管理器
  • 驱动程序管理器用来管理各种驱动程序。ODBC驱动程序管理器由微软公司提供,它包含在ODVC32.DLL中,对用户是透明的,管理应用程序和驱动程序之间的通信。ODBC驱动程序管理器主要功能包含装载ODBC驱动程序、选择和连接正确的驱动程序、管理数据源、检查ODBC调用参数的合法性及记录ODBC函数的调用等,当应用层需要时返回驱动程序的有关信息。
  • ODBC驱动程序管理器可以建立、配置或删除数据源,并查看系统当前所安装的数据库ODBC驱动程序。
  1. 数据库驱动程序
  • ODBC通过数据库驱动程序来提供应用系统与数据库平台的独立性。
  • ODBC应用程序不能直接存储数据库,其各种操作请求由驱动程序管理器提交给某个关系数据库管理系统的ODBC驱动程序,通过调用驱动程序所支持的函数来存取数据库。数据库的操作结果也通过驱动程序返回给应用程序。如果应用程序要操纵不同的数据库,就要动态地链接到不同的驱动程序上。
  • 目前的ODBC驱动程序有单束和多束两类。单束一般是数据源和应用程序在同一台机器上,驱动程序直接完成对数据文件的I/O操作,这时驱动程序相当于数据管理器。多束驱动程序支持客户机-服务器、客户机-应用服务器/数据库服务器等网络环境下的数据访问,此时由驱动程序完成数据库访问请求的提交和结果集接收,应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据。
  1. ODBC数据源管理
  • 数据源是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
  • ODBC给每个被访问的数据源指定唯一的数据源名(Data Source Name,DSN),并映射到所有必要的、用来存取数据的低层软件。在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等。最终用户无须知道数据库管理系统或其他数据库管理软件、网络以及有关ODBC驱动程序的细节,数据源对最终用户是透明的。

ODBC API基础

  • 各个数据库厂商的ODBC应用程序编程接口(ODBC API)都要符合两方面的一致性:
  1. API一致性,包括核心级、扩展1级、扩展2级。
  2. 语法一致性,包括最低限度SQL语法级、核心SQL语法级、扩展SQL语法级。

函数概述

  • ODBC3.0标准提供了76个函数接口,大致可以分为:
  1. 分配和释放环境句柄、连接句柄、语句句柄。
  2. 连接函数(SQL Driverconnect等)。
  3. 与信息相关的函数(SQLGetinfo、SQLGetFuction等)。
  4. 事务处理函数(如SQLEndTran)。
  5. 执行相关函数(SQLExecdirect、SQLExecute等)。
  6. 编目函数,ODBC 3.0提供了11个编目函数,如SQLTables、SQLColmn等。应用程序可以通过对编目函数的调用来获取数据字典的信息,如权限、表结构等。

句柄及其属性

  • 句柄是32位整数值,代表一个指针。ODBC3.0中句柄可以分为环境句柄连接句柄语句句柄描述符句柄4类,对于每种句柄,不同的驱动程序有不同的数据结构。

    (1)每个ODBC应用程序需要建立一个ODBC环境,分配一个环境句柄,存取数据的全局性背景,如环境状态、当前环境状态诊断、当前在环境上分配的连接句柄等。
    (2)一个环境句柄可以建立多个连接句柄,每一个连接句柄实现与一个数据源之间的连接。
    (3)在一个连接中可以建立多个语句句柄,它不只是一个SQL语句,还包括SQL语句产生的结果集以及相关的信息等。
    (4)在ODBC 3.0中又提出了描述句柄的概念,它是描述SQL语句的参数、结果集列的元数据集合。

数据类型

  • ODBC定义了两套数据类型:SQL数据类型C数据类型
  • SQL数据类型用于数据源,C数据类型用于应用程序的C代码。SQL数据通过SQLBindcol从结果集列中返回到应用程序变量;如果SQL语句含参数,应用程序为每个参数调用SQLBindparameter,并把它们绑定至应用程序变量。应用程序可以通过SQLGetTypeInfo来获取不同的驱动程序对于数据类型的支持情况。

ODBC的工作流程

  1. 配置数据源
  • 配置数据源有两种方法:
    (1)运行数据源管理工具来进行配置
    (2)使用Driver Manager提供的ConfigDsn函数来增加、修改或删除数据源。这种方法特别适用于在应用程序中创建的临时使用的数据源。
  1. 初始化环境
  • 由于还没有和具体的驱动程序相关联,所以不是由具体的数据库管理系统驱动程序来进行管理,而是由DriverManager来进行控制并配置环境属性。直到应用程序通过调用连接函数和某个数据源进行连接后,Driver Manager才调用所连的驱动程序中的SQLAllocHandle来真正分配环境句柄的数据结构。
  1. 建立连接
  • 应用程序调用SQLAllocHandle分配连接句柄,通过SQLConnect、SQLDriverConnect或SQLBrowseConnect与数据源连接。其中SQLConnect是最简单的连接函数,输入参数为配置好的数据源名称、用户ID和口令。
  1. 分配语句句柄
  • 在处理任何SQL语句之前,应用程序还需要首先分配一个语句句柄。语句句柄含有具体的SQL语句以及输出的结果集等信息。
  • 应用程序还可以通过SQLtStmtAttr来设置语句属性(也可以使用默认值)
  1. 执行SQL语句
  • 应用程序处理SQL语句的两种:预处理(SQLPrepare、SQLExecute适用于语句的多次执行)或直接执行(SQLExecdirect)。如果SQL语句含有参数,应用程序为每个参数调用SQLBindParameter,并把它们绑定至应用程序变量。这样应用程序可以直接通过改变应用程序缓冲区的内容从而在程序中动态改变SQL语句的具体执行。
  • 应用程序根据语句类型来进行相应处理
    (1)对于有结果集的语句(select或是编目函数),则进行结果集处理
    (2)对于没有结果集的函数,可以直接利用本语句句柄继续执行新的语句或是获取行计数(本次执行所影响的行数)之后继续执行
  • 在插入数据时,采用了预编译的方式,首先通过SQLPrepare来预处理SQL语句,然后将每一列绑定到用户缓冲区
  1. 结果集处理
  • 应用程序可以通过SQLNumResultCols来获取结果集中的列数,通过SQL DescribeCol或是SQLColAttrbute函数来获取结果集每一列的名称、数据类型、精度和范围。以上两步对于信息明确的函数是可以省略的。
  • ODBC中使用游标来处理结果集数据游标可以分为forward-only游标可滚动(scroll)游标。forward-only游标只能在结果集中向前滚动,它是ODBC的默认游标类型。可滚动(scroll)游标又可分为静态(static)、动态(dynamic)、码集驱动(keyset-driven)和混合型(mixed)4种。
  • ODBC游标的打开方式不同于嵌入式SQL,不是显式声明而是系统自动产生一个游标,当结果集刚刚生成时,游标指向第一行数据之前。应用程序通过SQLBindCol把查询结果绑定到应用程序缓冲区中,通过SQLFetch或是SQLFetchScroll来移动游标获取结果集中的每一行数据。当一个缓冲区不足以容纳所有的数据时,可以通过SQLGetdata分多次获取。最后通过SQLClosecursor来关闭游标
  1. 中止处理
  • 处理结束后,应用程序将首先释放语句句柄,然后释放数据库连接并与数据库服务器断开,最后释放ODBC环境。

OLE DB

  • 对象链接与确认数据库(Object Linking and Embedding Database,OLE DB)也是微软公司提出的数据库连接访问标准。
  • OLE DB的结构
    (1)消费者
    (2)提供者
    ①服务提供者
    ②数据提供者
  • OLE DB编程模型
    OLE DB编程模型有两种:Rowset模型和Binder模型。Rowset编程模型假定数据源中的数据比较规范,提供者以行集(recordset)形式发布数据。Binder编程模型主要用于提供者不提供标准格式数据的情况,这时OLE DB采用Binder编程模型将一个统一资源定位符(Uniform Resource Locator,URL)和一个OLE DB对象相关联或绑定,并在必要时创建层次结构的对象。

JDBC编程

  • JDBC是Java的开发者Sun制定的Java数据库连接技术的简称,为DBMS提供支持无缝连接应用的技术。JDBC在应用程序中的作用和ODBC类似,是Java实现数据库访问的应用程序编程接口,它是建立在X/Open SQL CLI基础上的。
  • JDBC是面向对象的接口标准,一般由具体的数据库厂商提供。它的主要功能是管理存放在数据库中的数据,通过对象定义了一系列与数据库系统进行交互的类和接口。通过接口对象,应用程序可以完成与数据库的连接、执行SQL语句、从数据库中获取结果、获取状态及错误信息、终止事务和连接等。
  • JDBC与ODBC类似,它为Java程序提供统一、无缝地操作各种数据库的接口。因为实际应用中常常无法确定用户想访问什么类型的数据库,程序员使用JDBC编程时可以不用关心它要操作的数据库是哪个厂家的产品,从而提高了软件的通用性。只要系统上安装了正确的驱动程序,JDBC应用程序就可以访问其相关的数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值