第7章数据访问接口数据库原理及应用讲义

第7章数据访问接⼝数据库原理及应⽤讲义
第7章数据库系统的访问
对于那些相对独⽴的软件供应商⽽⾔,经常要为每⼀个DBMS编写⼀个版本的应⽤程序,或者为每个要访问的DBMS编写针对DBMS的代码。这就意味着,⼤量的资源都耗在了编写和维护DB的访问上,更不⽤说应⽤程序了。此时应⽤程序的评价标准不再是质量,⽽是它能否在给定的DBMS中访问数据库。
这就需要开放的数据库连接,就是⼈们需要⽤⼀种新的⽅法来访问不同的数据库。为此,在C/S,B/S系统中必须⼴泛使⽤访问接⼝技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。常见的数据库访问接⼝的技术有固有调⽤、ODBC、JDBC、OLE DB、DAO、ADO、www.doczj/doc/aaa842ab284ac850ad02427c.html 以及基于XML的数据库访问等⼏种流⾏的⽅式。这其中以ODBC技术和JDBC技术应⽤最⼴泛,也是⽬前最为优秀的访问接⼝⽅式。
本章主要对⼏种常见的数据库访问技术(如固有调⽤、ODBC、JDBC、OLE DB、DAO、ADO、
www.doczj/doc/aaa842ab284ac850ad02427c.html 以及基于XML的数据库访问等)进⾏介绍。
7.1 数据库的访问接⼝
所谓访问接⼝是指分布式环境中保证操作系统、通信协议、数据库等之间进⾏对话、互操作的软件系统。
访问接⼝的作⽤是保证⽹络中各部件(软件和硬件)之间透明地连接,即隐藏⽹络部件的异构性,尤其保证不同⽹络、不同DBMS和某些访问语⾔的透明性,即下⾯三个透明性。
⑴⽹络透明性:能⽀持所有类型的⽹络。
⑵服务器透明性:不管服务器上的DBMS是何种型号(ORACLE、SYBASE、DB2等),⼀个好的访问接⼝都能通过标准的SQL语⾔与不同DBMS上的SQL语⾔连接起来。
⑶语⾔透明性:客户机可⽤任何开发语⾔进⾏发送请求和接受回答,被调⽤的功能应该像语⾔那样也是独⽴的。
应⽤系统访问数据库的接⼝⽅式有多种,本节介绍固有调⽤、ODBC和JDBC。
7.1.1 固有调⽤
每个数据库引擎都带有⾃⼰的包含⽤于访问数据库的APl函数的动态链接库DLL,应⽤程序可利⽤它存取和操纵数据库中的数据。如果应⽤程序直接调⽤这些动态链接库,就说它执⾏的是“固有调⽤”,因为该调⽤对于特定的数据库产品来说是“固有” (专⽤)的。
固有调⽤接⼝的优点是执⾏效率⾼,由于是“固有”,编程实现较简单。但它的缺点也是很严重的:不具通⽤性。对于不同的数据库引擎,应⽤程序必须连接和调⽤不同的专⽤的动态链接库,这对于⽹络数据库系统的应⽤是极不⽅便的。
7.1.2 ODBC
ODBC是“开放数据库互连”(Open Database Connectivity)的简称。ODBC是Microsoft 公司提出的、当前被业界⼴泛接受的应⽤程序通⽤编程接⼝(API)标准,它以X/Open和 ISO/IEC的调⽤级接⼝(CLI)规范为基础,⽤于对数据库的访问。我们可以⽤如下图⽰来说明ODBC概念。
图7-1 ODBC概念图
ODBC实际上是⼀个数据库访问函数库,使应⽤程序可以直接操纵数据库中的数据。ODBC 是基于SQL语⾔的,是⼀种在SQL和应⽤界⾯之间的标准接⼝,它解决了嵌⼊式SQL接⼝⾮规范核⼼,免除了应⽤软件随数据库的改变⽽改变的⿇烦。ODBC的⼀个最显著的优点是,⽤它⽣成的程序是与数据
库或数据库引擎⽆关的,为数据库⽤户和开发⼈员屏蔽了异构环境的复杂性,提供了数据库访问的统⼀接⼝,为应⽤程序实现与平台的⽆关性和可移植性提供了基础,因⽽ODBC获得了⼴泛的⽀持和应⽤。
1. ODBC结构
ODBC结构由四个主要成分构成:应⽤程序、驱动程序管理器、驱动程序、数据源。其构成及体系结构说明如下:
⑴应⽤程序执⾏处理并调⽤ODBC API函数,以提交 SQL语句并检索结果。
⑵驱动程序管理器(Driver Manager)根据应⽤程序需要加载/卸载驱动程序,处理ODBC函数调⽤,或把它们传送到驱动程序。
⑶驱动程序处理ODBC函数调⽤,提交SQL请求到⼀个指定的数据源,并把结果返回到应⽤程序。如果有必要,驱动程序修改⼀个应⽤程序请求,以使请求与相关的DBMS ⽀持的语法⼀致。俄罗斯国家杜马
⑷数据源包括⽤户要访问的数据及其相关的操作系统、DBMS及⽤于访问DBMS的⽹络平台。
其体系结构图如下:
图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处理终⽌
相应的函数名
SQLAllocEnv SQLAllocConnect
SQLConnect
燃烧海洋上的海盗SQLAllocStmt
SQLExecDirect(直接执⾏函数)SQLPrepare(语句预备函数)SQLExecute(语句执⾏函数)SQLDisconnect SQLFreeEnv SQLFreeConnect SQLFreeStmt
图7-3ODBC的基本流程控制图
具体⽤SQL语句来执⾏实现数据源的连接与断开代码⽚段如下
SQL语句的执⾏:
main()
ASD asd;/*说明asd是⼀个环境型变量*/
LZJ lzj;/*说明lzj是⼀个连接型变量*/
JDK jdk;/*说明jdk是⼀个语句句柄变量*/
毫秒
RETCODE retcode;/*说明retcode是⼀个返回变量*/ SQLAllocEnv(& asd);/*分配⼀个环境句柄*/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)
互联网精准广告投放retcode=SQLFetch(jdk);
if(RETCODE_IS_SUCCESSFUL(retcode)
do
rcGetData = SQLGetData(jdk,1,SQL_C_CHAR,
szBuffer,sizeof(szBuffer),&cbValue);
DISPLAY_MEMO(szBuffer,cbValue);/*显⽰*/
} while( rcGetData!=SQL_NO_DATA_FOUND);
ODBC的通⽤性,使它在基于客户服务器模式和基于浏览器服务器模式的数据库系统中获得了⼴泛的应⽤,⼏乎所有现⾏的关系数据库管理系统和主要的程序设计语⾔都⽀持ODBC。它的缺点是,相对于直接使⽤固有调⽤来说,ODBC的运⾏速度较慢。
7.1.3 JDBC
1. JDBC概述
⾃从SUN公司将Java语⾔于1995年5⽉正式公布以来,Java风靡全球。出现⼤量的⽤java语⾔编写的
程序,其中也包括数据库应⽤程序。但由于没有⼀个Java语⾔访问数据库的API,编程⼈员不得不在Java程序中加⼊C语⾔的ODBC函数调⽤。这就使很多Java 的优秀特性⽆法充分发挥,⽐如平台⽆关性、⾯向对象特性等。随着越来越多的编程⼈员对
Java语⾔的⽇益喜爱,越来越多的公司在Java程序开发上投⼊的精⼒⽇益增加,对java 语⾔接⼝的访问数据库的API的要求越来越强烈。也由于ODBC的有其不⾜之处,⽐如它并不容易使⽤,没有⾯向对象的特性等等,SUN公司决定开发⼀个以Java 语⾔为接⼝的数据库应⽤程序开发接⼝。在JDK1.X版本中,JDBC只是⼀个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为Java语⾔的标准部件。
JDBC(Java Database Connectivity)是⼀种可⽤于执⾏SQL语句的JavaAPI (Application Programming Interface,应⽤程序设计接⼝)。它由⼀些Java语⾔编写的类、接⼝组成。JDBC给数据库应⽤开发⼈员、数据库前台⼯具开发⼈员提供了⼀种标准的应⽤程序设计接⼝,使开发⼈员可以使⽤纯Java语⾔编写完整的数据库应⽤程序。⽽且因为JDBC基于X/Open的SQL调⽤级接⼝(CLI,这是ODBC的基础),JDBC可以保证JDBC API 在其他通⽤SQL级API(包括ODBC)之上实现。这意味着所有⽀持ODBC的数据库不加任何修改就能够与JDBC协同合作。
通过使⽤JDBC,开发⼈员可以很⽅便地将SQL语句传送给⼏乎任何⼀种数据库。也就是说,开发⼈
员可以不必写⼀个程序访问Sybase,写另⼀个程序访问Oracle,再写⼀个程序访问Microsoft的SQLServer。⽤JDBC写的程序能够⾃动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使⽤Java编写的应⽤程序可以在任何⽀持Java的平台上运⾏,不必在不同的平台上编写不同的应⽤。Java和JDBC的结合可以让开发⼈员在开发数据库应⽤时真正实
现“WriteOnce,RunEverywhere!”
Java具有健壮、安全、易⽤等特性,⽽且⽀持⾃动⽹上下载,本质上是⼀种很好的数据库应⽤的编程语⾔。它所需要的是Java应⽤如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。
JDBC扩展了Java的能⼒,如使⽤Java和JDBCAPI就可以公布⼀个Web页,页⾯中带有能访问远端数据库的Applet。或者企业可以通过JDBC让全部的职⼯(他们可以使⽤不同的操作系统,如Windwos,Machintosh和UNIX)在Intranet上连接到⼏个全球数据库上,⽽这⼏个全球数据库可以是不相同的。随着越来越多的程序开发⼈员使⽤Java语⾔,对Java 访问数据库易操作性的需求越来越强烈。
MIS管理⼈员喜欢Java和JDBC,因为这样可以更容易经济地公布信息。各种已经安装在数据库中的事务处理都将继续正常运⾏,甚⾄这些事务处理是存储在不同的数据库管理系统中;⽽对新的数据库应⽤来说,开发时间将缩短,安装和版本升级将⼤⼤简化。程序员可以编写或改写⼀个程序,然后将它放在服务器上,⽽每个⽤户都可以访问服务器得到最新的版本。对于信息服务⾏业,Java和JDBC提
供了⼀种很好的向外界⽤户更新信息的⽅法。
2. JDBC的基本功能
JDBC的应⽤功能很多,可以利⽤它来进⾏动态数据库的访问、参数的输⼊与输出、更新数据库、异常的处理等。但其最基本的功能,简单地说,JDBC具有如下三个基本功能:
⑴同数据库建⽴连接;
⑵向数据库发送SQL语句;
⑶处理数据库返回的结果。
下⾯我们以⼀段JAVA程序⽰例介绍这三个主要功能:
connection con=DriveManager.GetConnection(“jdbc:odbc: people,”examle”,“password”); //建⽴与数据库的接
Statement atestatement(); //建⽴语句对象

本文发布于:2024-09-21 00:51:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/571467.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   句柄   语句   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议