好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数据库系统的访问.docx

22页
  • 卖家[上传人]:ni****g
  • 文档编号:552720891
  • 上传时间:2023-06-01
  • 文档格式:DOCX
  • 文档大小:185.69KB
  • / 22 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第7章 数据库系统的访问对于那些相对独立的软件供应商而言,经常要为每一个DBMS编写一个版本的应用程序, 或者为每个要访问的DBMS编写针对DBMS的代码这就意味着,大量的资源都耗在了编写和 维护DB的访问上,更不用说应用程序了此时应用程序的评价标准不再是质量,而是它能 否在给定的 DBMS 中访问数据库这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库为此, 在 C/S, B/S 系统中必须广泛使用访问接口技术,以隐藏各种复杂性,屏蔽各种系统之间的 差异常见的数据库访问接口的技术有固有调用、ODBC、JDBC、OLE DB. DAO、ADO、ADO.NET 以及基于XML的数据库访问等几种流行的方式这其中以ODBC技术和JDBC技术应用最广泛, 也是目前最为优秀的访问接口方式本章主要对几种常见的数据库访问技术(如固有调用、 ODBC、 JDBC、 OLEDB、 DAO、 ADO、 ADO.NET以及基于XML的数据库访问等)进行介绍7.1 数据库的访问接口所谓访问接口是指分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互 操作的软件系统访问接口的作用是保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件 的异构性,尤其保证不同网络、不同DBMS和某些访问语言的透明性,即下面三个透明性。

      ⑴ 网络透明性:能支持所有类型的网络⑵ 服务器透明性:不管服务器上的DBMS是何种型号(ORACLE、SYBASE、DB2等),一 个好的访问接口都能通过标准的SQL语言与不同DBMS上的SQL语言连接起来⑶ 语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应 该像语言那样也是独立的应用系统访问数据库的接口方式有多种,本节介绍固有调用、ODBC和JDBC7.1.1 固有调用每个数据库引擎都带有自己的包含用于访问数据库的API函数的动态链接库DLL,应用 程序可利用它存取和操纵数据库中的数据如果应用程序直接调用这些动态链接库,就说它 执行的是“固有调用”,因为该调用对于特定的数据库产品来说是“固有” (专用)的固有调用接口的优点是执行效率高,由于是“固有”,编程实现较简单但它的缺点也 是很严重的:不具通用性对于不同的数据库引擎,应用程序必须连接和调用不同的专用的 动态链接库,这对于网络数据库系统的应用是极不方便的7.1.2 ODBCODBC 是“开放数据库互连” (Open Database Connectivity)的简称ODBC 是 Microsoft 公司提出的、当前被业界广泛接受的应用程序通用编程接口(API)标准,它以X/Open和 ISO/IEC的调用级接口(CLI)规范为基础,用于对数据库的访问。

      我们可以用如下图示来说 明 ODBC 概念图7-1 ODBC概念图ODBC实际上是一个数据库访问函数库,使应用程序可以直接操纵数据库中的数据oODBC 是基于SQL语言的,是一种在SQL和应用界面之间的标准接口,它解决了嵌入式SQL接口非 规范核心,免除了应用软件随数据库的改变而改变的麻烦ODBC的一个最显著的优点是, 用它生成的程序是与数据库或数据库引擎无关的,为数据库用户和开发人员屏蔽了异构环境 的复杂性,提供了数据库访问的统一接口,为应用程序实现与平台的无关性和可移植性提供 了基础,因而 ODBC 获得了广泛的支持和应用1. ODBC结构ODBC 结构由四个主要成分构成:应用程序、驱动程序管理器、驱动程序、数据源其 构成及体系结构说明如下:⑴应用程序 执行处理并调用ODBC API函数,以提交SQL语句并检索结果⑵驱动程序管理器(Driver Manager) 根据应用程序需要加载/卸载驱动程序,处理 ODBC 函数调用,或把它们传送到驱动程序⑶驱动程序 处理ODBC函数调用,提交SQL请求到一个指定的数据源,并把结果 返回到应用程序如果有必要,驱动程序修改一个应用程序请求,以使请求与相关的DBMS 支持的语法一致。

      ⑷ 数据源 包括用户要访问的数据及其相关的操作系统、DBMS及用于访问DBMS的 网络平台其体系结构图如下:SQL Server数据源Oracle数据源Foxpro数据源Sybase数据源DB2数据源DBDBDBDBDBODBC数据库应用程序驱动程序管理器SQL Server驱动程序Oracle驱动程序Foxpro驱动程序Sybase 驱动程序DB2驱动程序图 7-2 ODBC 的体系结构图为达到通用的效果,ODBC在应用程序和特定的数据库之间插入了一个ODBC驱动程序管 理器(ODBC Driver Manager)驱动程序管理器为应用程序加载或卸载驱动程序,负责管理 应用程序中ODBC函数在DLL中函数的绑定(Binding),它还处理几个初始化ODBC调用,提 供ODBC函数的入口点,进行ODBC调用的参数合法性检查等每种数据库引擎都需要向 ODBC 驱动程序管理器注册它自己的 ODBC 驱动程序,这种驱 动程序对于不同的数据库引擎是不同的ODBC驱动程序管理器能将与ODBC兼容的SQL请求 从应用程序传给这种独一无二的驱动程序,随后由驱动程序把对数据库的操作请求翻译成相 应数据库引擎所提供的固有调用,对数据库实现访问操作。

      ODBC通过驱动程序来提供数据库独立性驱动程序是一个用于支持ODBC函数调用的模 块(通常是一个动态链接库DLL),应用程序调用驱动程序所支持的函数来操纵数据库若想使应用程序操作不同类型的数据库,就要动态链接到不同的驱动程序上 ODBC 驱 动程序处理ODBC函数调用,将应用程序的SQL请求提交给指定的数据源,接受由数据源返 回的结果,传回给应用程序ODBC的API —致性级别分为三级:核心级、扩展1级和扩展2级核心级包括最基本 的功能,包括分配、释放环境句柄、数据库连接、执行SQL语句等,核心级函数能满足最基 本的应用程序要求扩展1级在核心级的基础上增加了一些函数,通过它们可以在应用程序 中动态地了解表的模式,可用的概念模型类型及它们的名称等扩展2级在扩展1级的基础 上又增加了一些函数通过它们可以了解到关于主关键字和外来关键字的信息、表和列的权 限信息、数据库中的存储过程信息等,并且还有更强的游标和并发控制功能2. ODBC接口函数按功能⑴ 分配和释放内存这组函数用于分配必要的句柄:连接句柄、环境句柄和语句句柄 连接句柄定义一个数据库环境,环境句柄定义一个数据库连接,语句句柄定义一条 SQL 语句。

      执行分配函数时首先分配内存,然后定义所需的数据结构,并对指向数据结构的句柄 赋值一但句柄已经分配,应用系统便可以把它传递给后续的接口函数,指出该函数所作用 的环境、连接或语句⑵ 连接在应用系统的流程控制中,一旦环境(包括其句柄)已经分配,便可以建立二 个或者多个连接句柄;同样地,语句句柄也是如此有了用于连接的函数,用户便能与服务 器建立自己的连接但在退出应用系统时,应关闭与服务器的连接⑶ 执行SQL语句指定和执行SQL语句的方法有两种:准备的和直接的如果想让应 用系统多次提交sQL语句并且可能修改参数值,便使用准备的执行;如果只让应用系统提交 一次 SQL 请求,便使用直接的执行⑷接收结果这组函数负责处理从SQL语句结果集合中检索数据,并且检索与结果集 合相关的信息例如,描述结果集合中的一列以及属性,取出结果集合的下一行,计算一条 SQL语句所影响的行数等任何一个函数都可以在派生表或结果集合中使用光标,指出它当 前在结果集合中的哪一行⑸ 事务控制这组函数允许提交或者重新运行事务尽管 ODBC 的缺省模式是“自动 提交”这时每一条SQL语句都是一个完整的事务,但是也可以设置一个连接选项,从而允 许使用“人工提交”模式。

      这种“人工提交”模式允许事务一直打开,直至应用系统提交⑹ 错误处理和其他事项该组函数用于返回与句柄相关的错误信息另一个函数允许人们取消一条SQL语句ODBC 的基本流程控制是:初始化 SQL 处理终止在初始化阶段分配环境,包括分配环 境句柄、连接句柄和语句句柄,与服务器连接;在SQL处理阶段执行SQL语句和检索操作; 在终止阶段释放语句句柄、环境句柄、连接句柄,与服务器断开如图7-3 所示3. 数据源的连接与断开⑴ 连接数据源的函数连接数据源的函数有三个,但最有效、最通用的是下面一种格式:SQLConnect (hdbc, szDSN, cbDSN, szUID, cbUID, szAuthStr, cbAuthStr)其中,参数hdbc 是一个已经分配 的连接分配;参数szDSN和cbDSN分别表示系统所要连接的数据源名称及其长度;参数szUID 和cbUID分别表示用户标识符及其长度;参数szAuthStr和cbAuthStr分别表示权限字符串 及其长度⑵ 断开数据源函数其格式如下:SQL Disconnect(hdbc)其中,参数hdbc是要断开的连接句柄初始化终止SQL处理相应的函数名SQLAllocEnvSQLAllocConnectSQLConnectSQLAllocStmtSQLExecDirect (直接执行函数)SQLPrepare (语句预备函数)SQLExecute (语句执行函数)SQLDisconnectSQLFreeStmtSQLFreeConnectSQLFreeEnv图 7-3 ODBC 的基本流程控制图具体用SQL语句来执行实现数据源的连接与断开代码片段如下main(){ASDasd;LZJlzj;JDKjdk;RETCODEretcode;SQLAllocEnv(& asd);SQL 语句的执行:/ *说明asd是一个环境型变量* //*说明 lzj 是一个连接型变量*// *说明 jdk 是一个语句句柄变量*// *说明 retcode 是一个返回变量*// *分配一个环境句柄*// *分配一个连接句柄*/SQLAllocConnect(asd, &lzj);SQLConnect (lzj, 〃学生〃,SQL_NTS, NULL, 0, NULL, 0); / *连接数据源* / SQLAllocStmt(lzj, & jdk); /*分配一个语句句柄*/retcode=SQLExecDirect(jdk, "SELECT * FROM S", SQL_NTS);/ *执行语句*/„„ / *结果集处理*/SQLDisconnect(lzj); / *断开数据源*/SQLFreeStmt(jdk, SQL_DROP) / *释放一个语句句柄*/SQLFreeConnect(lzj); / *释放一个连接句柄*/SQLFreeEnv(asd); / *当应用完成后,释放环境句柄*/}4.有准备地执行SQL语句的函数:⑴ SQL 语句预备函数其格式如下:SQLPrepare(jdk, szSqlStr, cbSqlStr)。

      其中,参数hstmt 是一个有效 的语句句柄,参数szSqlStr和cbSqlStr分别表示将要执行的SQL语句的字符串及其长度⑵ SQL 语句执行函数其格式如下:SQLExecute (jdk)其中参数jdk是一个有效的语句句柄⑶ SQL 语句查询结果的获取:while(RETCODE_IS_SUCCESSFUL(retcode。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.