华中科技大学 电子与信息工程系,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,中间件技术,2024/11/18,1,华中科技大学 电子与信息工程系,本章重要概念,(1)中间件的定义和作用,(2),ODBC,分层的体系结构:应用程序,驱动程序管理器,,DB,驱动程序,,ODBC,数据源。,(3),ODBC,接口:应用程序基本流程,,ODBC,句柄,,ODBC,连接,,SQL,语句的执行。,ODBC,两套符合性级别。典型的,DB,应用系统开发工具。,(4),JDBC,的基本功能,,JDBC,的结构,,JDBC,接口。,2024/11/18,2,华中科技大学 电子与信息工程系,前言,对于那些相对独立的软件供应商而言,经常要为每一个,DBMS,编写一个版本的应用程序,或者为每个要访问的,DBMS,编写针对,DBMS,的代码。这就意味着,大量的资源都耗在了编写和维护,DB,的访问上,更不用说应用程序了。此时应用程序的评价标准不再是质量,而是它能否在给定的,DBMS,中访问数据库。,这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。为此,在,C/S,系统中必须广泛使用中间件技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。,ODBC,技术和,JDBC,技术就是这种优秀的中间件技术。,2024/11/18,3,华中科技大学 电子与信息工程系,10.1.1 中间件的定义,定义10.1 中间件(middleware)是分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互操作的软件系统。,2024/11/18,4,华中科技大学 电子与信息工程系,10.2.2 中间件的作用,中间件的作用是保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件的异构性,尤其保证不同网络、不同,DBMS,和某些访问语言的透明性,即下面三个透明性。,网络透明性:能支持所有类型的网络。,服务器透明性:不管服务器上的,DBMS,是何种型号(,ORACLE,、,SYBASE,、,DB2,等),一个好的中间件都能通过标准的,SQL,语言与不同,DBMS,上的,SQL,语言连接起来。,语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。,2024/11/18,5,华中科技大学 电子与信息工程系,10.2.1 ODBC概念,Open Database Connectibvity,2024/11/18,6,华中科技大学 电子与信息工程系,10.2.2 ODBC,的体系结构(一),2024/11/18,7,华中科技大学 电子与信息工程系,10.2.2 ODBC,的体系结构(二),应用程序的主要功能是:调用,ODBC,函数,递交,SQL,语句给,DBMS,,检索出结果,并进行处理。,驱动程序管理器是一个动态连接库(,DLL,),用于连接各种,DBS,的,DBMS,驱动程序(如,Oracle,、,Foxpro,、,Sybase,等驱动程序),管理应用程序和,DBMS,驱动程序之间的交互作用(通信)。,应用程序通过调用驱动程序所支持的函数来操纵数据库。驱动程序也是一个动态连接库(,DLL,)。,2024/11/18,8,华中科技大学 电子与信息工程系,10.2.2 ODBC,的体系结构(三),网络环境下基于单层驱动程序的ODBC结构,2024/11/18,9,华中科技大学 电子与信息工程系,10.2.2 ODBC,的体系结构(四),基于多层驱动程序的ODBC结构,2024/11/18,10,华中科技大学 电子与信息工程系,10.2.2 ODBC,的体系结构(五),基于网关机制的多层驱动程序的ODBC结构,2024/11/18,11,华中科技大学 电子与信息工程系,10.2.2 ODBC,的体系结构(六),用户数据源:用户创建的数据源,称为“用户数据源”。此时只有创建者才能使用,并且只能在所定义的机器上运行。任何用户都不能使用其他用户创建的用户数据源。,系统数据源:所有用户和在,Windows NT,下以服务方式运行的应用程序均可使用系统数据源。,文件数据源:文件数据源是,ODBC 3.0,以上版本增加的一种数据源,可用于企业用户,,ODBC,驱动程序也安装在用户的计算机上。,2024/11/18,12,华中科技大学 电子与信息工程系,10.2.3 ODBC的特性,ODBC,是一个调用层的接口,ODBC,定义了标准的,SQL,语法,ODBC,提供一个驱动程序管理器来管理并同时访问多个,DBMS,系统,2024/11/18,13,华中科技大学 电子与信息工程系,10.3.1 ODBC,应用程序的基本流程,2024/11/18,14,华中科技大学 电子与信息工程系,10.3.2 ODBC句柄(一),2024/11/18,15,华中科技大学 电子与信息工程系,10.3.2 ODBC句柄(二),henv,hdbc,hstmt,环境句柄,(,定义,DB,应用环境,),连接句柄,(,定义一个,DB,连接,),语句句柄,(,定义一个,SQL,语句,),2024/11/18,16,华中科技大学 电子与信息工程系,10.3.3 数据源的连接与断开,(1),连接数据源的函数,连接数据源的函数有三个,但最有效、最通用的是下面一种格式:,SQLConnect,(,hdbc,,,szDSN,,,cbDSN,,,szUID,,,cbUID,,,szAuthStr,,,cbAuthStr,)。其中,参数,hdbc,是一个已经分配的连接分配;,参数,szDSN,和,cbDSN,分别表示系统所要连接的数据源名称及其长度;,参数,szUID,和,cbUID,分别表示用户标识符及其长度;,参数,szAuthStr,和,cbAuthStr,分别表示权限字符串及其长度。,(2),断开数据源函数,其格式如下:,SQLDisconnect,(,hdbc,)其中,参数,hdbc,是要断开的连接句柄。,2024/11/18,17,华中科技大学 电子与信息工程系,10.3.4 SQL语句的执行(一),main,(),HENV henv,;*说明,henv,是一个环境型变量*,HDBC hdbc,;*说明,hdbc,是一个连接型变量*,HSTMThstmt,;*说明,hstmt,是一个语句句柄变量*,RETCODE retcode,;*说明,retcode,是一个返回变量*,SQLAllocEnv,(,&henv,);*分配一个环境句柄*,SQLAllocConnect,(,henv,,,&hdbc,);*分配一个连接句柄*,SQLConnect,(,hdbc,,,学生,,,SQL_NTS,,,NULL,,,0,,,NULL,,,0,);*连接数据源*,SQLAllocStmt,(,hdbc,,,&hstmt,);*分配一个语句句柄*,retcode=SQLExecDirect,(,hstmt,,,SELECT *FROM S,,,SQL_NTS,);*执行语句*,*结果集处理*,SQLDisconnect,(,hdbc,);*断开数据源*,SQLFreeStmt,(,hstmt,,,SQL_DROP,)*释放一个语句句柄*,SQLFreeConnect,(,hdbc,);*释放一个连接句柄*,SQLFreeEnv,(,henv,);*当应用完成后,释放环境句柄*,2024/11/18,18,华中科技大学 电子与信息工程系,10.3.4 SQL语句的执行(二),有准备地执行,SQL,语句的函数,(1)SQL,语句预备函数,其格式如下:,SQLPrepare,(,hstmt,,,szSqlStr,,,cbSqlStr,)。其中,参数,hstmt,是一个有效的语句句柄,参数,szSqlStr,和,cbSqlStr,分别表示将要执行的,SQL,语句的字符串及其长度。,(2)SQL,语句执行函数,其格式如下:,SQLExecute,(,hstmt,)。其中参数,hstmt,是一个有效的语句句柄。,2024/11/18,19,华中科技大学 电子与信息工程系,10.3.5 查询结果的获取,while,(,RETCODE_IS_SUCCESSFUL,(,retcode,),retcode=SQLFetch,(,hstmt,);,if,(,RETCODE_IS_SUCCESSFUL,(,retcode,),do,rcGetData=SQLGetData,(,hstmt,,,1,,,SQL_C_CHAR,,,szBuffer,,,sizeof,(,szBuffer,),,&cbValue,);,DISPLAY_MEMO,(,szBuffer,,,cbValue,);*显示*,while,(,rcGetData!=SQL_NO_DATA_FOUND,);,2024/11/18,20,华中科技大学 电子与信息工程系,10.4 ODBC的符合性级别,ODBC,使得我们能够访问任何数据源而不必修改应用程序。但在实际使用中存在着一些问题。由于,DBMS,厂商提供的,SQL,不同(不是指形式上,而是功能上有多有少),有的,SQL,功能在某厂商的,DBMS,上没有实现,则,ODBC,就不可能为应用程序完成这一功能;有的,SQL,功能是,SQL,标准新增加的,而,DBMS,厂商没有及时跟上,则,ODBC,同样也无法完成新功能。对于具体,DBMS,不支持的,SQL,功能,,DBMS,要通报给应用程序。而从,ODBC,本身来讲,它最好支持完全的,SQL,,这样才能做到应用程序不用修改就可以访问不同的数据源。,2024/11/18,21,华中科技大学 电子与信息工程系,10.4.1 API符合性的三个级别,核心级,API,1,级,API,2,级,API,2024/11/18,22,华中科技大学 电子与信息工程系,10.4.2 SQL符合性的三个级别,最小级SQL,核心级SQL,扩展级SQL,2024/11/18,23,华中科技大学 电子与信息工程系,10.4.3 ODBC API,与,SQL CLI,之间的协调,Microsoft,公司于,1991,年,11,月提出了一个关于,ODBC,的体系结构,并在,1992,年发布了,ODBC 1.0,规范,随后以软件开发工具包(,SDK,)形式出版并发行了这种面向,SQL,的,API,。,数据库公司国际财团,SQL Access Group,(,SAG,)和标准化组织,X,Open,在,1992,年联合出版了一个规范,该规范定义了调用级界面(,Call Level Interface,),,CLI,)标准。,1993,年,,Microsoft,公司推出了,ODBC 2.0,规范,并于,1994,年出版了,ODBC 2.0 SDK,。,Microsoft,在,1998,年出版的,ODBC 3.0,规范中,作了一些修改,目的是更进一步接近,SQL,标准。,SQL3,(即,SQL99,)的第三部分介绍了,SQL,CLI,。,2024/11/18,24,华中科技大学 电子与信息工程系,10.4.4,典型的数据库应用系统开发工具,PowerBilder,Delphi,Visual Basic,Developer2000,2024/11/18,25,华中科技大学 电子与信息工程系,10.5.1 Java简介,Java语言,Java的工作方式,Java的特性,Java的应用程序和小程序,2024/11/18,26,华中科技大学 电子与信息工程系,10.5.2 JDBC的提出,JDBC,是执行,SQL,语句的,Java API,。,JDBC,是“,Java DataBase Connectivity”,(,JDBC,数据库连接)的缩写。,JDBC,原来是,Java Soft,公司设计的,Java,语言的数据库访问,API,。最初的,Java,语言本身并没有访问,DB,的能力,,JDBC,是第一个支持,Java,语言的标准