数据库系统的访问

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7章数据库系统的访问
对于那些相对独立的软件供应商而言,经常要为每一个DBMS编写一个版本的应用程序,或者为每个要访问的DBMS编写针对DBMS的代码。

这就意味着,大量的资源都耗在了编写和维护DB的访问上,更不用说应用程序了。

此时应用程序的评价标准不再是质量,而是它能否在给定的DBMS中访问数据库。

这就需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。

为此,在C/S,B/S系统中必须广泛使用访问接口技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。

常见的数据库访问接口的技术有固有调用、ODBC、JDBC、OLE DB、DAO、ADO、 以及基于XML的数据库访问等几种流行的方式。

这其中以ODBC技术和JDBC技术应用最广泛,也是目前最为优秀的访问接口方式。

本章主要对几种常见的数据库访问技术(如固有调用、ODBC、JDBC、OLE DB、DAO、ADO、以及基于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 stmt=con.createstatement(); //建立语句对象
ResultSet rs=stmt.executeQuery(“SELECT a,b,c FROM Table1”);
//运行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中的类相对应,提供更多的通用查询的语义树表示等。

⑵与SQL的一致性
一般数据库系统在很大范围内支持SQL的语法语义,但他们所支持的一般只能是SQL
语法全集中的一个子集,并且通常他们有许多更强的功能。

那么JDBC是怎么保证与SQL一
致性的呢?
①JDBC允许使用从属于DBMS的系统的任何查询语句。

②一般认为ANSI SQL 112 Entry Lever标准功能比较完备,并且,是被广泛支持。

⑶可在现有数据库接口之上实现
JDBC SQL API保证能在普通的SQL API上实现,特别是ODBC。

这种要求使JDBC的功能
变得更加丰富,尤其是在处理SQL 说明中的OUT参数及有关大的数据块上。

⑷提供与其他Java 系统一致的Java界面
JDBC提供与Java系统其他部分一致的Java界面,这对Java语言来说有着非常重要的
意义。

在很大程度上,这意味着Java语言与标准运行系统被认为是一致的,简单化,并且
是功能强大的。

⑸ JDBC的基本API在最大可能上简单化
这也是体现在大多数情况下采用简单的结构来实现特定的任务,而不是提供复杂的结
构,或者说对某个特定的任务,即提供一种方案,而不是多种复杂的方案。

JDBC的API以
后还将不断的扩展以实现更完善的功
能。

⑹使用静态的通用数据类型,使一般情形简单化,多种方法、多种功能
ODBC中定义的界面过程少,利用过程的标志参数,使它们选择不同的操作。

而Java核
心的类定义的界面方法多,方法不带有标志项参数,使用基本接口时不必被与复杂功能相关
的参数所困扰。

4. JDBC与ODBC和其他API的比较,JDBC一种底层的API
JDBC是一种底层API,这意味着它将直接调用SQL命令。

JDBC完全胜任这个任务,而
且比其他数据库互联更加容易实现。

同时它也是构造高层API和数据库开发工具的基础。


层API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的。

但所有
这样的API将最终被翻译为象JDBC这样的底层API。

目前两种基于JDBC的高层API正处在
开发阶段。

⑴SQL语言嵌入Java的预处理器。

虽然DBMS已经实现了SQL查询,但JDBC要求SQL 语句被当作字符串参数传送给Java程序。

而嵌入式SQL预处理器允许程序员将SQL语句混用:Java变量可以在SQL语句中使用,来接收或提供数值。

然后SQL的预处理器将把这种Java/SQL混用的程序翻译成带有JDBC API的Java程序。

⑵实现从关系数据库到Java类的直接映射。

Javasoft和其他公司已经宣布要实现这一技术。

在这种“对象/关系”映射中,表的每一行都将变成这类的一个实例,每一列的值对应实例的一个属性。

程序员可以直接操作Java的对象;而存取所需要的SQL调用将在内部直接产生。

还可以实现更加复杂的映射,比如多张表的行在一个Java的类中实现。

随着大家对JDBC兴趣的不断浓厚,越来越多的开发人员已经开始利用JDBC作为基础的工具进行开发。

这使开发工作变得容易。

⑶JDBC和ODBC及其他API的比较
到目前为止,微软的ODBC可能是用得最广泛的访问关系数据库的API。

它提供了连接几乎任何一种平台、任何一种数据库的能力。

那么,为什么不直接从Java中直接使用ODBC呢?
因为可以从Java中使用ODBC,但最好在JDBC的协助下,用JDBC-ODBC桥接器实现。

那么,为什么需要JDBC呢?要回答这个问题,有这么几个方面:
⑴ODBC并不适合在Java中直接使用。

ODBC是一个C语言实现的API,从Java程序调用本地的C程序会带来一系列类似安全性、完整性、健壮性的缺点。

⑵其次,完全精确地实现从C代码ODBC到JavaAPI写的ODBC的翻译也并不令人满意。

比如,Java没有指针,而ODBC中大量地使用了指针,包括极易出错的空指针“void*”。

因此,对Java程序员来说,把JDBC设想成将ODBC转换成面向对象的API是很自然的。

⑶ODBC并不容易学习,它将简单特性和复杂特性混杂在一起,甚至对非常简单的查询都有复杂的选项。

而JDBC刚好相反,它保持了简单事物的简单性,但又允许复杂的特性。

⑷JDBC这样的JavaAPI对于纯Java方案来说是必须的。

当使用ODBC时,人们必须在每一台客户机上安装ODBC驱动器和驱动管理器。

如果JDBC驱动器是完全用Java语言实现的话,那么JDBC的代码就可以自动的下载和安装,并保证其安全性,而且,这将适应任何Java平台,从网络计算机NC到大型主机Mainframe。

总而言之,JDBCAPI是能体现SQL最基本抽象概念的、最直接的Java接口。

它建构在ODBC的基础上,因此,熟悉ODBC的程序员将发现学习JDBC非常容易。

JDBC保持了ODBC 的基本设计特征。

实际上,这两种接口都是基于X/OPENSQL的调用级接口(CLI)。

它们的最大的不同是JDBC是基于Java的风格和优点,并强化了Java的风格和优点。

最近,微软又推出了除了ODBC以外的新的API,如RDO,ADO和OLEDB。

这些API事实上在很多方面上同JDBC一样朝着相同的方向努力,也就是努力成为一个面向对象的,基于ODBC的类接口。

然而,这些接口目前并不能代替ODBC,尤其在ODBC驱动器已经在市场完全形成的时候,更重要的是它们只是ODBC的“漂亮的包装”。

⑸ JDBC两层模型和三层模型
JDBC支持两层模型(如图7-4),也支持三层模型访问数据库。

图7-4 两层结构的客户/服务方式
如图7-4所示,两层模型中,一个Java Appple或者一个JAVA应用直接同数据库连接。

这就需要能直接被访问的数据库进行连接的JDBC驱动器。

用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。

数据库可以在同一机器上,也可以另一机器上通过网络进行连接。

这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。

这个网络可是intranet,比如连接全体雇员的企业内部网,当然也可以是internet。

图7-5 三层结构的客户/服务方式
如图7-5所示,在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。

数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们返回用户。

MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。

而且,在许多情况下,三层模型可以提供更好的性能。

到目前为止,“中间层”通常还是用C或C++实现,以保证其高性能。

但随着优化编译器的引入,将java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。

而JDBC是允许从一个java“中间层”访问数据库的关键。

7.2 客户机/服务器模式的数据库系统
网络数据库系统是指在计算机网络环境下运行的数据库系统,它的数据库分散配置在网络节点上,能够对网络用户提供远程数据访问服务。

有人把它也称为分布式数据库系统,但是它只能算是一种特定的分布式数据库系统,它驻留在各个网络节点上的数据库仍然是集中式的数据库,
20世纪80年代以来微型计算机和计算机随络飞速发展。

由于日益发展的分布式的信息处理要求,计算机网络包括局城网(LAN)、广城网(WAN)、因特网(Internet)和企业网(Intranet)都得到了广泛的应用。

传统的大型主机和哑终端系统受到了以微机为主体的微机网络的挑战,规模向下优化(Downsizing)和规模适化(Rightsizing)已是大势所趋,客户棚服务器(Client/Server,C/S)计算模式应运而生。

进入20世纪90年代后,由于信息技术的发展和信息量的急剧膨胀,信息的全球化打破了地域的界限,Intemet技术以惊人的速度发展,促使客户棚服务器计算模式向广域的范围延伸,向Intemet迁移,产生了浏览器服务器(Browser/Server,B/S)工作模式。

客户机服务器模式(简称C/S)是以网络环境为基础、将计算应用有机地分布在串台寸算机中的结构,如图7-1所示,其中的一个或多个计算机规划服务,称为服务器(Servers)其他的计算机则接受服务,称为客户机(Clients)。

C/S模式把系统的任务进行了划分,它把用户界面和数据处理操作分开在前端(客户端)和后端(服务器端),服务器负责数据的存储、检索与维护;而客户机负责提供GUI接口,承担诸如处理与显示检索所得的数据、解释和发送用户的要求等任务。

客户机提出数据服务请求,由服务器把按照请求处理后的数据传送给客户。

因此在网络中传输的数据仅仅是客户需要的那部分数据,而不是全部。

这个特点使得客户枷服务器的工作速度主要取决于进行大量数据操作的服务器,而不是前端的硬件设备;同时大大降低了对网络传输速度的要求,使系统性能有了较大的提高。

客户机/服务器方式增加了数据库系统数据共享能力,服务器上存放着大量的数据,用户只需在客户机上用标准的SQL语言访问数据库中的数据,便可方便地得到所需的各种数据及信息。

从用户的角度看,客户机/服务器系统基本由五个部分组成:客户机、服务器、客户和服务器之间的连接。

1. 客户机
客户机是指面向最终用户的接口或应用程序,它通过向服务器请求数据服务+然盾做必要的处理;、将结果显示给用户。

客户机耙大部分数据处理工作留给服务器,让服务器的高档硬件和软件充分施展它们的特长,并且减少了网络上的信息传输量。

2. 服务器
服务器的主要功能是建立进程和网络服务地址,监听用户的调用,’·处理客户的请求,将结果返回给客户和释放与客户的连接。

服务器可以是大型机、—中小型机密微机工作站,服务器要求配有高性能处理器。

大内存、稳定快速的总线和网络传输,以及完整的安全措施。

服务器为客户的请求提供所要求的服务,包括数据存取、数据加工和处理等。

3. 连接件
客户机与服务器之间的连接是通过网络连接实现的,对应用系统来说这种连接更多的是一种软件通信工程。

(如网络协议等)。

现在有多种连接客户和月瞄器的标准接口和软件,如开放数据库互连(ODBC>就是一种基于SQL访问组织规范的数据库连接的应用程序接口(APl),该接口可以在应用程序与一个或多个数据库之间进行通信。

客户应用只须和标准的ODBC函数打交道,采用标准的SQL语言编程,而不必关心服务器软件的要求及完成方式。

客户机/服务器(C/S)结构既可指硬件的结构也可指软件的结构。

硬件的客户机/服务器结构是指某项任务在两台或多台计算机之间进行分配。

客户机在完成某—项任务时,通常要利用服务器上的共享资源和服务器提供的服务:在一个客户机/服务器体系结构中可以有多台客户机和多台服务器。

软件的客户机/服务器结构是把一个软件系统或应用系统按逻辑功能划分为若干个组成部分,如用户界面、表示逻辑、事务逻辑;数据访问等。

这些软件成分按照其相对角色的不同,区分为客户端软件和服务器端软件。

客户软件能够请求月R务器软件的服务,例如,客户软件负责数据的表示和应用,请求服务器软件为其提供数据的存储和检刻艮务。

客户软件和服务器软件可以分布在网络的不同计算机节点上,也可以放置在同一台计算机上。

客户。

相关文档
最新文档