《数据库系统的访问.pdf》由会员分享,可在线阅读,更多相关《数据库系统的访问.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第7 章 数据库系统的访问 对于那些相对独立的软件供应商而言,经常要为每一个 DBMS编写一个版本的应用程序,或者为每个要访问的 DBMS编写针对 DBMS的代码。这就意味着,大量的资源都耗在了编写和维护 DB 的访问上,更不用说应用程序了。此时应用程序的评价标准不再是质量,而是它能否在给定的 DBMS中访问数据库。这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。为此,在 C/S,B/S系统中必须广泛使用访问接口技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。常见的数据库访问接口的技术有固有调用、ODBC、JDBC、OLE DB、DAO、ADO、ADO.NET以及基于X
2、ML的数据库访问等几种流行的方式。这其中以ODBC技术和JDBC技术应用最广泛,也是目前最为优秀的访问接口方式。本章主要对几种常见的数据库访问技术(如固有调用、ODBC、JDBC、OLE DB、DAO、ADO、ADO.NET以及基于 XML的数据库访问等)进行介绍。7.1 数据库的访问接口 所谓访问接口是指分布式环境中保证操作系统、通信协议、数据库等之间进行对话、互操作的软件系统。访问接口的作用是保证网络中各部件(软件和硬件)之间透明地连接,即隐藏网络部件的异构性,尤其保证不同网络、不同 DBMS和某些访问语言的透明性,即下面三个透明性。网络透明性:能支持所有类型的网络。服务器透明性:不管服务
3、器上的 DBMS是何种型号(ORACLE、SYBASE、DB2等),一个好的访问接口都能通过标准的 SQL语言与不同 DBMS上的 SQL语言连接起来。语言透明性:客户机可用任何开发语言进行发送请求和接受回答,被调用的功能应该像语言那样也是独立的。应用系统访问数据库的接口方式有多种,本节介绍固有调用、ODBC和 JDBC。7.1.1 固有调用 每个数据库引擎都带有自己的包含用于访问数据库的 APl函数的动态链接库 DLL,应用程序可利用它存取和操纵数据库中的数据。如果应用程序直接调用这些动态链接库,就说它执行的是“固有调用”,因为该调用对于特定的数据库产品来说是“固有”(专用)的。固有调用接口
4、的优点是执行效率高,由于是“固有”,编程实现较简单。但它的缺点也是很严重的:不具通用性。对于不同的数据库引擎,应用程序必须连接和调用不同的专用的动态链接库,这对于网络数据库系统的应用是极不方便的。7.1.2 ODBC ODBC是“开放数据库互连”(Open Database Connectivity)的简称。ODBC是 Microsoft公司提出的、当前被业界广泛接受的应用程序通用编程接口(API)标准,它以 X/Open和 ISO/IEC的调用级接口(CLI)规范为基础,用于对数据库的访问。我们可以用如下图示来说明 ODBC概念。应用程序应用程序应用程序公共接口API ODBC实际上是一个数
5、据库访问函数库,使应用程序可以直接操纵数据库中的数据。ODBC是基于 SQL语言的,是一种在 SQL和应用界面之间的标准接口,它解决了嵌入式 SQL接口非规范核心,免除了应用软件随数据库的改变而改变的麻烦。ODBC的一个最显著的优点是,用它生成的程序是与数据库或数据库引擎无关的,为数据库用户和开发人员屏蔽了异构环境的复杂性,提供了数据库访问的统一接口,为应用程序实现与平台的无关性和可移植性提供了基础,因而 ODBC获得了广泛的支持和应用。1.ODBC 结构 ODBC结构由四个主要成分构成:应用程序、驱动程序管理器、驱动程序、数据源。其构成及体系结构说明如下:应用程序 执行处理并调用 ODBC
6、API 函数,以提交 SQL 语句并检索结果。驱动程序管理器(Driver Manager)根据应用程序需要加载/卸载驱动程序,处理ODBC 函数调用,或把它们传送到驱动程序。驱动程序 处理 ODBC 函数调用,提交 SQL 请求到一个指定的数据源,并把结果返回到应用程序。如果有必要,驱动程序修改一个应用程序请求,以使请求与相关的 DBMS支持的语法一致。数据源 包括用户要访问的数据及其相关的操作系统、DBMS 及用于访问 DBMS 的网络平台。其体系结构图如下:ODBC数据库应用程序SQL Server驱动程序Oracle驱动程序DB2驱动程序Sybase驱动程序Foxpro驱动程序驱动程序
7、管理器SQL Server数据源Oracle数据源Foxpro数据源Sybase数据源DB2数据源DBDBDBDBDB图 7-1 ODBC概念图 图 7-2 ODBC的体系结构图 为达到通用的效果,ODBC在应用程序和特定的数据库之间插入了一个 ODBC驱动程序管理器(ODBC Driver Manager)。驱动程序管理器为应用程序加载或卸载驱动程序,负责管理应用程序中 ODBC函数在 DLL中函数的绑定(Binding),它还处理几个初始化 ODBC调用,提供 ODBC函数的入口点,进行 ODBC调用的参数合法性检查等。每种数据库引擎都需要向 ODBC驱动程序管理器注册它自己的 ODBC驱
8、动程序,这种驱动程序对于不同的数据库引擎是不同的。ODBC驱动程序管理器能将与 ODBC兼容的 SQL请求从应用程序传给这种独一无二的驱动程序,随后由驱动程序把对数据库的操作请求翻译成相应数据库引擎所提供的固有调用,对数据库实现访问操作。ODBC通过驱动程序来提供数据库独立性。驱动程序是一个用于支持 ODBC函数调用的模块(通常是一个动态链接库 DLL),应用程序调用驱动程序所支持的函数来操纵数据库。若想使应用程序操作不同类型的数据库,就要动态链接到不同的驱动程序上。ODBC驱动程序处理 ODBC函数调用,将应用程序的 SQL请求提交给指定的数据源,接受由数据源返回的结果,传回给应用程序。OD
9、BC的 API一致性级别分为三级:核心级、扩展 1 级和扩展 2 级。核心级包括最基本的功能,包括分配、释放环境句柄、数据库连接、执行 SQL语句等,核心级函数能满足最基本的应用程序要求。扩展 1 级在核心级的基础上增加了一些函数,通过它们可以在应用程序中动态地了解表的模式,可用的概念模型类型及它们的名称等。扩展 2 级在扩展 1 级的基础上又增加了一些函数。通过它们可以了解到关于主关键字和外来关键字的信息、表和列的权限信息、数据库中的存储过程信息等,并且还有更强的游标和并发控制功能。2.ODBC 接口函数按功能 分配和释放内存。这组函数用于分配必要的句柄:连接句柄、环境句柄和语句句柄。连接句
10、柄定义一个数据库环境,环境句柄定义一个数据库连接,语句句柄定义一条 SQL语句。执行分配函数时首先分配内存,然后定义所需的数据结构,并对指向数据结构的句柄赋值。一但句柄已经分配,应用系统便可以把它传递给后续的接口函数,指出该函数所作用的环境、连接或语句。连接。在应用系统的流程控制中,一旦环境(包括其句柄)已经分配,便可以建立二个或者多个连接句柄;同样地,语句句柄也是如此。有了用于连接的函数,用户便能与服务器建立自己的连接。但在退出应用系统时,应关闭与服务器的连接。执行 SQL语句。指定和执行 SQL语句的方法有两种:准备的和直接的。如果想让应用系统多次提交 sQL语句并且可能修改参数值,便使用
11、准备的执行;如果只让应用系统提交一次 SQL请求,便使用直接的执行。接收结果。这组函数负责处理从 SQL语句结果集合中检索数据,并且检索与结果集合相关的信息。例如,描述结果集合中的一列以及属性,取出结果集合的下一行,计算一条SQL语句所影响的行数等。任何一个函数都可以在派生表或结果集合中使用光标,指出它当前在结果集合中的哪一行。事务控制。这组函数允许提交或者重新运行事务。尽管 ODBC的缺省模式是“自动提交”,这时每一条 SQL语句都是一个完整的事务,但是也可以设置一个连接选项,从而允许使用“人工提交”模式。这种“人工提交”模式允许事务一直打开,直至应用系统提交。错误处理和其他事项。该组函数用
12、于返回与句柄相关的错误信息。另一个函数允许人们取消一条 SQL语句。ODBC的基本流程控制是:初始化 SQL处理终止。在初始化阶段分配环境,包括分配环境句柄、连接句柄和语句句柄,与服务器连接;在 SQL处理阶段执行 SQL语句和检索操作;在终止阶段释放语句句柄、环境句柄、连接句柄,与服务器断开。如图 7-3所示。3.数据源的连接与断开 连接数据源的函数 连接数据源的函数有三个,但最有效、最通用的是下面一种格式:SQLConnect(hdbc,szDSN,cbDSN,szUID,cbUID,szAuthStr,cbAuthStr)。其中,参数 hdbc是一个已经分配的连接分配;参数szDSN和c
13、bDSN分别表示系统所要连接的数据源名称及其长度;参数szUID和 cbUID分别表示用户标识符及其长度;参数 szAuthStr和 cbAuthStr分别表示权限字符串及其长度。断开数据源函数 其格式如下:SQL Disconnect(hdbc)其中,参数 hdbc是要断开的连接句柄。分配环境句柄分配连接句柄与服务器连接分配语句句柄初始化释放环境句柄SQL 处理释放语句句柄语句处理和检索部分与服务器断开释放连接句柄终止相应的函数名SQLAllocEnvSQLAllocConnectSQLConnectSQLAllocStmtSQLExecDirect(直接执行函数)SQLPrepare(语句
14、预备函数)SQLExecute(语句执行函数)SQLDisconnectSQLFreeEnvSQLFreeConnectSQLFreeStmt 图 7-3 ODBC的基本流程控制图 具体用 SQL语句来执行实现数据源的连接与断开代码片段如下 SQL语句的执行:main()ASD asd;*说明 asd是一个环境型变量*LZJ lzj;*说明 lzj是一个连接型变量*JDK jdk;*说明 jdk是一个语句句柄变量*RETCODE retcode;*说明 retcode是一个返回变量*SQLAllocEnv(&asd);*分配一个环境句柄*SQLAllocConnect(asd,&lzj);*分
15、配一个连接句柄*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语句预备函数
16、 其格式如下: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_C
17、HAR,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
18、语言编写的程序,其中也包括数据库应用程序。但由于没有一个 Java语言访问数据库的 API,编程人员不得不在 Java程序中加入 C语言的 ODBC函数调用。这就使很多 Java的优秀特性无法充分发挥,比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在 Java程序开发上投入的精力日益增加,对 java语言接口的访问数据库的 API的要求越来越强烈。也由于 ODBC的有其不足之处,比如它并不容易使用,没有面向对象的特性等等,SUN公司决定开发一个以 Java语言为接口的数据库应用程序开发接口。在 JDK1.X版本中,JDBC只是一个可选部件,到了
19、JDK1.1公布时,SQL类包(也就是 JDBCAPI)就成为 Java语言的标准部件。JDBC(Java Database Connectivity)是 一 种 可 用 于 执 行 SQL 语 句 的 JavaAPI(Application Programming Interface,应用程序设计接口)。它由一些 Java语言编写的类、接口组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以使用纯 Java语言编写完整的数据库应用程序。而且因为 JDBC基于 X Open 的 SQL调用级接口(CLI,这是 ODBC的基础),JDBC可以
20、保证 JDBC API在其他通用 SQL级 API(包括 ODBC)之上实现。这意味着所有支持 ODBC的数据库不加任何修改就能够与 JDBC协同合作。通过使用 JDBC,开发人员可以很方便地将 SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问 Sybase,写另一个程序访问 Oracle,再写一个程序访问 Microsoft的 SQLServer。用 JDBC写的程序能够自动地将 SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用 Java编写的应用程序可以在任何支持 Java的平台上运行,不必在不同的平台上编写不同的应用。Java和 JDBC的结合
21、可以让开发人员在开发数据库应用时真正实现“WriteOnce,RunEverywhere!”Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。它所需要的是 Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。JDBC扩展了 Java的能力,如使用 Java和 JDBCAPI就可以公布一个 Web 页,页面中带有能访问远端数据库的 Applet。或者企业可以通过 JDBC让全部的职工(他们可以使用不同的操作系统,如 Windwos,Machintosh和 UNIX)在 Intranet 上连接到几个全球数据库上,而这几个全球数据
22、库可以是不相同的。随着越来越多的程序开发人员使用Java语言,对Java访问数据库易操作性的需求越来越强烈。MIS管理人员喜欢 Java和 JDBC,因为这样可以更容易经济地公布信息。各种已经安装在数据库中的事务处理都将继续正常运行,甚至这些事务处理是存储在不同的数据库管理系统中;而对新的数据库应用来说,开发时间将缩短,安装和版本升级将大大简化。程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的版本。对于信息服务行业,Java和 JDBC提供了一种很好的向外界用户更新信息的方法。2.JDBC 的基本功能 JDBC的应用功能很多,可以利用它来进行动态数据库的
23、访问、参数的输入与输出、更新数据库、异常的处理等。但其最基本的功能,简单地说,JDBC具有如下三个基本功能:同数据库建立连接;向数据库发送 SQL语句;处理数据库返回的结果。下面我们以一段 JAVA程序示例介绍这三个主要功能:connection con=DriveManager.GetConnection(“jdbc:odbc:people,”examle”,“password”);/建立与数据库的接 Statement stmt=con.createstatement();/建立语句对象 ResultSet rs=stmt.executeQuery(“SELECT a,b,c FROM T
24、able1”);/运行 SQL语句,返回数据/库操作结果 while(rs.next()int x=getInt(“a”);/获得数据库表记录 a 项的值 string s=getstring(“b”);/获得数据库表记录 b 项的值 float f=getFloat(“c”);/获得数据库表记录 c 项的值 3.JDBC API 的特点 在 SQL水平上的 API JDBC是为 Java语言定义的一个 SQL调用级界面,也就是说其关键在于执行基本的 SQL说明和取回结果。在此基础上可以形成更高层次的 API,其中的接口包括直接将基本表与Java中的类相对应,提供更多的通用查询的语义树表示等。
25、与 SQL的一致性 一般数据库系统在很大范围内支持 SQL的语法语义,但他们所支持的一般只能是 SQL语法全集中的一个子集,并且通常他们有许多更强的功能。那么 JDBC是怎么保证与 SQL一致性的呢?JDBC允许使用从属于 DBMS的系统的任何查询语句。一般认为 ANSI SQL 112 Entry Lever标准功能比较完备,并且,是被广泛支持。可在现有数据库接口之上实现 JDBC SQL API保证能在普通的 SQL API上实现,特别是 ODBC。这种要求使 JDBC的功能变得更加丰富,尤其是在处理 SQL 说明中的 OUT参数及有关大的数据块上。提供与其他 Java 系统一致的 Jav
26、a界面 JDBC提供与 Java系统其他部分一致的 Java界面,这对 Java语言来说有着非常重要的意义。在很大程度上,这意味着 Java语言与标准运行系统被认为是一致的,简单化,并且是功能强大的。JDBC的基本 API在最大可能上简单化 这也是体现在大多数情况下采用简单的结构来实现特定的任务,而不是提供复杂的结构,或者说对某个特定的任务,即提供一种方案,而不是多种复杂的方案。JDBC的 API以后还将不断的扩展以实现更完善的功 能。使用静态的通用数据类型,使一般情形简单化,多种方法、多种功能 ODBC中定义的界面过程少,利用过程的标志参数,使它们选择不同的操作。而 Java核心的类定义的界
27、面方法多,方法不带有标志项参数,使用基本接口时不必被与复杂功能相关的参数所困扰。4.JDBC 与 ODBC 和其他 API 的比较,JDBC 一种底层的 API JDBC是一种底层 API,这意味着它将直接调用 SQL命令。JDBC完全胜任这个任务,而且比其他数据库互联更加容易实现。同时它也是构造高层 API和数据库开发工具的基础。高层 API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的。但所有这样的 API将最终被翻译为象 JDBC这样的底层 API。目前两种基于 JDBC的高层 API正处在开发阶段。SQL语言嵌入 Java的预处理器。虽然 DBMS已经实现了 SQL
28、查询,但 JDBC要求 SQL语句被当作字符串参数传送给 Java程序。而嵌入式 SQL预处理器允许程序员将 SQL语句混用:Java变量可以在 SQL语句中使用,来接收或提供数值。然后 SQL的预处理器将把这种JavaSQL混用的程序翻译成带有 JDBC API的 Java程序。实现从关系数据库到 Java类的直接映射。Javasoft和其他公司已经宣布要实现这一技术。在这种“对象关系”映射中,表的每一行都将变成这类的一个实例,每一列的值对应实例的一个属性。程序员可以直接操作 Java的对象;而存取所需要的 SQL调用将在内部直接产生。还可以实现更加复杂的映射,比如多张表的行在一个 Java
29、的类中实现。随着大家对 JDBC兴趣的不断浓厚,越来越多的开发人员已经开始利用 JDBC作为基础的工具进行开发。这使开发工作变得容易。JDBC和 ODBC及其他 API的比较 到目前为止,微软的ODBC可能是用得最广泛的访问关系数据库的 API。它提供了连接几乎任何一种平台、任何一种数据库的能力。那么,为什么不直接从 Java中直接使用 ODBC呢?因为可以从 Java中使用 ODBC,但最好在 JDBC的协助下,用 JDBCODBC桥接器实现。那么,为什么需要 JDBC呢?要回答这个问题,有这么几个方面:ODBC并不适合在 Java中直接使用。ODBC是一个 C 语言实现的 API,从 Ja
30、va程序调用本地的 C 程序会带来一系列类似安全性、完整性、健壮性的缺点。其次,完全精确地实现从 C 代码 ODBC到 JavaAPI写的 ODBC的翻译也并不令人满意。比如,Java没有指针,而 ODBC中大量地使用了指针,包括极易出错的空指针“void”。因此,对 Java程序员来说,把 JDBC设想成将 ODBC转换成面向对象的 API是很自然的。ODBC并不容易学习,它将简单特性和复杂特性混杂在一起,甚至对非常简单的查询都有复杂的选项。而 JDBC刚好相反,它保持了简单事物的简单性,但又允许复杂的特性。JDBC这样的 JavaAPI对于纯 Java方案来说是必须的。当使用 ODBC时,
31、人们必须在每一台客户机上安装 ODBC驱动器和驱动管理器。如果 JDBC驱动器是完全用 Java语言实现的话,那么 JDBC的代码就可以自动的下载和安装,并保证其安全性,而且,这将适应任何Java平台,从网络计算机 NC 到大型主机 Mainframe。总而言之,JDBCAPI是能体现 SQL最基本抽象概念的、最直接的 Java接口。它建构在ODBC的基础上,因此,熟悉 ODBC的程序员将发现学习 JDBC非常容易。JDBC保持了 ODBC的基本设计特征。实际上,这两种接口都是基于 X OPENSQL的调用级接口(CLI)。它们的最大的不同是 JDBC是基于 Java的风格和优点,并强化了 J
32、ava的风格和优点。最近,微软又推出了除了 ODBC以外的新的 API,如 RDO,ADO和 OLEDB。这些 API事实上在很多方面上同 JDBC一样朝着相同的方向努力,也就是努力成为一个面向对象的,基于ODBC的类接口。然而,这些接口目前并不能代替 ODBC,尤其在 ODBC驱动器已经在市场完全形成的时候,更重要的是它们只是 ODBC的“漂亮的包装”。JDBC两层模型和三层模型 JDBC支持两层模型(如图 7-4),也支持三层模型访问数据库。Client machine Java Application JDBC DBMS DBMS-proprietary protocol Databas
33、e server 图 7-4 两层结构的客户/服务方式 如图 7-4所示,两层模型中,一个 Java Appple或者一个 JAVA应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的 JDBC驱动器。用户的 SQL 语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server”结构,用户的计算机作为 Client,运行数据库的计算机作为 Server。这个网络可是 intranet,比如连接全体雇员的企业内部网,当然也可以是 internet。图 7-5 三层结构的客户/服务方式 如图 7-5所
34、示,在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL 语句发送到数据库。数据库处理 SQL 语句并将结果返回“中间层”,然后“中间层”将它们 返回用户。MIS 管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的 API,这个 API可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。到目前为止,“中间层”通常还是用 C 或 C+实现,以保证其高性能。但随着优化编译器的引入,将 java 的字节码转换成高效的机器码,用 java 来实现“中
35、间层”将越来越实际。而 JDBC是允许从一个 java“中间层”访问数据库的关键。7.2 客户机服务器模式的数据库系统 网络数据库系统是指在计算机网络环境下运行的数据库系统,它的数据库分散配置在网络节点上,能够对网络用户提供远程数据访问服务。有人把它也称为分布式数据库系统,但是它只能算是一种特定的分布式数据库系统,它驻留在各个网络节点上的数据库仍然是集中式的数据库,20世纪 80 年代以来微型计算机和计算机随络飞速发展。由于日益发展的分布式的信息处理要求,计算机网络包括局城网(LAN)、广城网(WAN)、因特网(Internet)和企业网(Intranet)都得到了广泛的应用。传统的大型主机和
36、哑终端系统受到了以微机为主体的微机网络的挑战,规模向下优化(Downsizing)和规模适化(Rightsizing)已是大势所趋,客户棚服务器(Client Server,CS)计算模式应运而生。进入 20 世纪 90 年代后,由于信息技术的发展和信息量的急剧膨胀,信息的全球化打破了地域的界限,Intemet 技术以惊人的速度发展,促使客户棚服务器计算模式向广域的范围延伸,向 Intemet 迁移,产生了浏览器服务器(BrowserServer,B S)工作模式。Client machine(GUI)Application server(Java)JDBC DBMS DBMS-proprie
37、tary protocol Database server Java applet or HTML browser HTTP,RMI or CORBA calls Server machine(business logic)客户机服务器模式(简称 C/S)是以网络环境为基础、将计算应用有机地分布在串台寸算机中的结构,如图7-1所示,其中的一个或多个计算机规划服务,称为服务器(Servers)其他的计算机则接受服务,称为客户机(Clients)。C/S模式把系统的任务进行了划分,它把用户界面和数据处理操作分开在前端(客户端)和后端(服务器端),服务器负责数据的存储、检索与维护;而客户机负责提供
38、GUI接口,承担诸如处理与显示检索所得的数据、解释和发送用户的要求等任务。客户机提出数据服务请求,由服务器把按照请求处理后的数据传送给客户。因此在网络中传输的数据仅仅是客户需要的那部分数据,而不是全部。这个特点使得客户枷服务器的工作速度主要取决于进行大量数据操作的服务器,而不是前端的硬件设备;同时大大降低了对网络传输速度的要求,使系统性能有了较大的提高。客户机服务器方式增加了数据库系统数据共享能力,服务器上存放着大量的数据,用户只需在客户机上用标准的 SQL语言访问数据库中的数据,便可方便地得到所需的各种数据及信息。从用户的角度看,客户机服务器系统基本由五个部分组成:客户机、服务器、客户和服务
39、器之间的连接。1.客户机 客户机是指面向最终用户的接口或应用程序,它通过向服务器请求数据服务+然盾做必要的处理;、将结果显示给用户。客户机耙大部分数据处理工作留给服务器,让服务器的高档硬件和软件充分施展它们的特长,并且减少了网络上的信息传输量。2.服务器 服务器的主要功能是建立进程和网络服务地址,监听用户的调用,处理客户的请求,将结果返回给客户和释放与客户的连接。服务器可以是大型机、中小型机密微机工作站,服务器要求配有高性能处理器。大内存、稳定快速的总线和网络传输,以及完整的安全措施。服务器为客户的请求提供所要求的服务,包括数据存取、数据加工和处理等。3.连接件 客户机与服务器之间的连接是通过
40、网络连接实现的,对应用系统来说这种连接更多的是一种软件通信工程。(如网络协议等)。现在有多种连接客户和月瞄器的标准接口和软件,如开放数据库互连(ODBC就是一种基于 SQL访问组织规范的数据库连接的应用程序接口(APl),该接口可以在应用程序与一个或多个数据库之间进行通信。客户应用只须和标准的ODBC函数打交道,采用标准的 SQL语言编程,而不必关心服务器软件的要求及完成方式。客户机/服务器(CS)结构既可指硬件的结构也可指软件的结构。硬件的客户机服务器结构是指某项任务在两台或多台计算机之间进行分配。客户机在完成某项任务时,通常要利用服务器上的共享资源和服务器提供的服务:在一个客户机服务器体系
41、结构中可以有多台客户机和多台服务器。软件的客户机服务器结构是把一个软件系统或应用系统按逻辑功能划分为若干个组成部分,如用户界面、表示逻辑、事务逻辑;数据访问等。这些软件成分按照其相对角色的不同,区分为客户端软件和服务器端软件。客户软件能够请求月 R 务器软件的服务,例如,客户软件负责数据的表示和应用,请求服务器软件为其提供数据的存储和检刻艮务。客户软件和服务器软件可以分布在网络的不同计算机节点上,也可以放置在同一台计算机上。客户端软件和服务器端软件的功能划分可以有多种不同的方案。客户机/服务器结构是一个开放式的体系结构,使得数据库不仅要支持开放性,而且还要开放系统本身,这种开放性包括用户界面、
42、软硬件平台和网络协议。利用开放性在客户机侧犀供应用程序接口(APl)及网络接口,使得用户仍可按照他们所熟悉的、流行的方式开发客户机应用。在服务器一侧,通过对核心关系数据管理系统(RDBMS)的功能调用,使网络接口满足了数据完整性、安全性及故障恢复等要求。有了开放性,数据库服务器就能 支持多种网络协议,运行不同厂家的开发工具,而对某个应用程序开发工具也可以在不同的数据库服务器上运行并存取不同数据源中的数据,从而给应用系统的开发提供了极大的灵活性。逻辑等重头戏均在客户机端,所有客户都必须安装应用软件和工具,因而使客户机变得很“肥”(即肥客户机)。服务器则成为数据剧艮务器,仅负责全局数据的存取、处理
43、和维护,响应用户请求,因而侧服务器相对较;瘦”(即瘦服务器)。这使得应用系统的性能、可伸缩性和可扩展性较差。三层 C S 结构如图 7-5所示,它将应用功能分成表示层、功能层和数据层三部分,分别由客户机应用服务器和数据库服务器实现。其解决方案是:对这三层进行明确分割,并在逻辑上使其相互独立。1.表示层 表示层由客户机实现。表示层是应用的用户接口部分;它担负着用户与应用间的对话功能。它接受用户的输入请求,显示应用输出的数据。为使用户能直观地进行操作,一般要使用图形用户接口(GUl),操作简单、易学易用。与两层 C S 结构的客户机部分相比,三层C S结构的客户功能更加简洁清晰,大部分的应用逻辑被
44、移植到应用服务器上,但简单的应用逻辑处理和数据库访问仍然可以在客户机上实现,以获得较高的效率。2.功能层 功能层由应用服务器实现。功能层相当于应用的本体,它是应用逻辑处理的核心,是具体业务的实现。例如,在制作商品订购合同时要计算合同金额,按照预定的格式配置数据、打印订购合同,而处理所需的数据则要从表示层或数据层取得。表示层和功能层之间的数据交互要尽可能简洁。例如用户检索数据时,要设法将有关检索要求的信息一次传送给功能层,而由功能层处理过的检索结果数据也一次传送给表示层。通常,在功能层申包含有:确认用户对应用和数据库存取权限的功能,以及记录系统处理日志的功能。应用服务器一般和数据库服务器有密切的
45、数据交往,。应剧艮务器向数据库服务器发送SQl请求,数据库服务器将数据访问结果返回给应用服务器。此外,应用服务器也可能和数据库服务器间没有数据交换,而作为客户机的独立服务器使用。当应用逻辑变得复杂或增加新的应用服务器时,新增的应用服务器可与原应用服务器驻留于同一主机或是不同的主机上。3.数据层 数据层就是 DBMS,驻留在数据服务器上;负责管理对数据库数据的存取操作。它接受Client Browser Web Server Middle Ware DataBase Server HTTP 请求 HTML 页面 应用服务器提出的 SQL请求,完成数据的存储、访问和完整性约束检查等。DBMS必须能
46、迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统(RDBMS)。因此,一般从功能层传送到数据层的要求大都使用 SQL语言。与二层 C S 结构相比,三层 C S 结构有明显的优点:伸缩性好,具有灵活的硬件系统构成;提高了程序的可维护性,各层相对独立,可以并行开发;有利于严密的安全管理。当然,由于三层 C S 中的应用被划分在多层服务器和局部网络上,系统的设计、配置、测试都较困难。7.3 浏览器服务器模式的数据库系统 7.3.1 Web数据库的体系结构 浏览器服务器模式的数据库体系是利用 Web服务器和 Active Server Pages(简称ASP)作为数据库操作的中间层,将客
47、户机服务器模式的数据库结构与 Web密切结合,从而形成具有三层或多层 Web结构的浏览器服务器模式的数据库体系(见图 1)。前端采用基于瘦客户机的浏览器技术(Navigator或 IE),通过服务器(Microsoft的 IIS或 Netscape Fast Track)及中间件访问数据库。中间件驻留在 WEB服务器上,负责管理 Web服务器和数据库服务器之间的通信并提供应用程序服务。数据库服务器管理数据库中的数据,客户发出HTTP请求,Web服务器以 HTML页面向用户返回查询结果。图 7-6 Web数据库技术体系结构 由此可见,Web Server承担了传接任务中的很大一部分,而 Clie
48、nt端却是很少的一部分,这就是所谓的“胖服务器瘦客户端”模式,此模式的好处在于能同时接受多种请求,降低了实现信息系统的费用,充分利用了现有的系统资源。并且可以综合多个系统,使资源更加丰富,可以适应技术变化,人机接口简单、直观。使系统开放性好,客户可以通过Intranet或 Internet 进行访问。在服务器端可以进行安全性设置,限制了访问人员的级别与类型,加强了数据安全性。7.3.2 技术实现 首先在服务器上应安装 IIS4.0(或更高版本)。为了让 IIS能正确地访问数据源,微软为 ODBC配置添加了一个新的选项,用它运行“System DSN”。这些特殊的数据源为我们提供了设置全局(公用
49、)数据源的一种途径。由于登录进入的用户可能设置了对系统和资源的不同访问方式,所以需要用 System DSN保证它们访问的都是正确数据库,在配置中必须添加数据库驱动程序。为了能对数据库实现安全管理,必须对相应的用户指定相应的权限:如,只读,可读/写等,所以在编程中应对某一用户名进行权限设置。ASP 是一个服务器的脚本环境,在这里可以生成和运行动态的、交互的、高性能的 Web 服务器应用程序。ASP 能够把 HTML、Script、ActiveX组件等有机结合在一起,形成一个能够在服务器上运行的应用程序,并把按用户要求专门制作的标准 HTML页面送给客户端浏览器。基于 ASP 访问 Web 数据
50、库的工作原理如下:图 7-7 基于 ASP 访问 Web 数据库的工作原理图 当用户请求一个*.asp 主页时,Web 服务器响应 HTTP请求 ActiveX Scripting 兼容的脚本(如 VBScript 和 JavaScript)时,ASP 引擎调用相应的脚本引擎进行处理。若脚本中含有访问数据库的请求,就通过 ODBC 或 OLEDB与后台数据库相连,由数据库访问组件 ADO(ActiveX Date Objects)执行访库操作。ASP 脚本在服务器端解释执行,它依据访问数据库的结果集自动生成符合 HTML语言的主页,去响应用户的请求。而用户并看不到 ASP 的程序源代码,增强了