Page 1
4.3 数据库访问接口技术
–
? 4.3.1 数据库应用体系结构与系统实现技术
? 4.3.2 两层结构数据库系统的访问接口技术
? 4.3.3 Web-DB访问接口技术
Page 2
4.3.1 数据库应用体系结构与系统实现技术
?应用体系结构与数据处理任务分担
?客户 /服务器系统的处理方式
?数据库系统的优化技术
Page 3
应用体系结构与数据处理任务分担
第一 层
客 户 端
第二 层
数据 库
服 务 器
任 务,
用 户 界面
主要的商 业逻辑
和数据 处 理 逻辑
任 务,
服 务 器端的 验证
数据 库访问
Page 4
应用体系结构与数据处理任务分担
第一 层
客 户 端
第二 层
应 用
服 务 器
第三 层
数据 库
服 务 器
任 务,
用 户 界面
任 务,
商 业逻辑
数据 处 理 逻辑
任 务
数据 库访问
Web浏览 器
Web服 务 器
应 用服 务 器
数据 库访问
Page 5
客户 /服务器系统的处理方式
?( 1) 完全分布式处理
?( 2) 完全客户 /服务器
?( 3) 有限客户 /服务器
?( 4) 专用客户 /服务器
Page 6
4.3.2 两层结构数据库系统的访问接口技术
?两层客户 /服务器结构数据库管理机制
?客户应用对数据库的访问
?开放数据库互连 ODBC的技术原理
Page 7
两层客户 /服务器结构数据库管理机制
应 用程序
数据 库 API
网 络 /通信接口
存 储 文件
DBMS核心
数据管理 客 户 管理
网 络 /通信接口
数据 /网 络协议
客 户 端 服 务 器
Page 8
客户应用对数据库的访问
? 在一个包括多个服务器和大量客户的企业级客户 /服务器结构数据
库系统中, 来自不同厂商的客户软件以及用户自己开发的客户应
用要访问不同的服务器中的数据, 这些数据可能存在于不同厂商
的关系数据库, 非关系数据库, 文件系统或其他的系统中 。 要对
这些数据进行透明的访问需要开放的访问接口 。
? ( 1) 专用数据库驱动程序
? ( 2) ODBC
? ( 3) JDBC
Page 9
数据源访问接口技术,ODBC
? Microsoft推出的 ODBC( 开放数据库互连 ) 技术, 旨在为异质数据库的
同时访问提供了公共的 API,以使客户应用对要访问的数据源透明 。
? ODBC实际上是一个数据库访问函数库, 通过它可以使应用程序可以直
接操纵数据库中的数据 。 它是基于 SQL语言的, 是一种在 SQL和应用界
面之间的标准接口, 它解决了嵌入式 SQL接口 ( SQLAPI) 非规范化的矛
盾, 提供了 SQLAPI的规范核心, 免除了应用程序软件随数据库的改变
而改变的痛苦 。 在客户 /服务器结构的数据库系统中, ODBC标准能为不
同的数据源提供统一的数据访问界面, 客户端应用通过 ODBC接口可以
实现对不同数据源的访问 。
Page 10
ODBC示意图
应用程序
驱动程序管理器
驱动程序 驱动程序 驱动程序
数据源 数据源 数据源
数据库 数据库 数据库
Page 11
ODBC工作原理
? ODBC通过驱动程序来提供数据库的独立性 。 驱动程序是一个用以支持
ODBC函数调用的模块 ( 通常是一个动态连接库 DLL) 。 应用程序通过调
用驱动程序所支持的函数来操纵数据库 。 若想使应用程序操作不同类型
的数据库, 就要动态地连接到不同的驱动程序上 。
? 驱动程序管理器为应用程序装人驱动器, 负责管理应用程序中 ODBC函数
和 DLL中函数的绑定, 它还处理几个初始化 ODBC调用, 提供 ODBC函数的
人口点, 对 ODBC调用的参数进行合法性检查等 。
? 客户应用通过调用 ODBC驱动程序管理器 ( Driver Manager) 所提供的
API或调用封装了 ODBC驱动程序管理器 API的类库 ( 对面向对象语言而言
), 对不同数据库的数据源进行操作 。 在数据源和 ODBC API之间起联系
作用的是为不同的数据库专门开发的 ODBC Driver( 见图 5- 8) 。
Page 12
工作原理示意图
VB应用程序 C++应用程序 Delphi程序
ODBC接口 ODBC接口 ODBC接口
ODBC( SQL语言)
ODBC驱称 ODBC驱称 ODBC驱称
SQL数据库 VFP数据库 DB数据库
Page 13
ODBC工作原理分析
? ODBC采用的一致性级别构成了其功能分区的最高种类,为应用和驱动
提供了一种满足各自特殊需要的 API方法,保持了与 SQL标准的一致
。故而 ODBC定义了两种一致性级别,API一致性和 SQL一致性。
? ODBC的 API一致性级别分为三级:核心级、扩展 Ⅰ 级和扩展 Ⅱ 级。核
心级包括最基本的功能,由 23个函数,包括分配、释放环境句柄、数
据库连接、执行 SQL语句等。核心级函数能满足最基本的应用程序要
求。扩展 Ⅰ 级在核心级的基础上增加了 19个函数,通过它们可以在应
用程序中动态地了解表的模式,可用的概念数据类型及它们的名称等
。扩展 Ⅱ 级在扩展 Ⅰ 级的基础上再增加 19个函数,通过它们可以了
解到关于主码和外码的信息,表和列的权限信息,数据库中的存储过
程信息等,并且还有更强的游标和并发控制功能。
Page 14
CONT,ODBC工作原理分析
? SQL一致性也有 3种:最低 SQL、核心 SQL和扩展 SQL。其中最低 SQL提
供了一个最大交集范围的 SQL子集,以便使应用程序可以轻松地进行交互
操作。扩展 SQL则描述了独特于 ODBC的 SQL扩充,它为许多 DBMS支持的
高级 SQL特性与数据类型提供了一种方便的途径,如外层连接、标量函数
、存储过程援引等等。
? Driver的作用主要包括联结数据库管理, 错误处理管理, 数据类型转换
以及对各种 DBMS以不同方式提供的目录 ( 表及其他对象 ) 进行访问管理
和 DBMS的各种信息 。 其中既包括 Microsoft提供的标准件, 也包括数据
库厂商为支持 ODBC而自己开发的数据库产品 ODBC Driver,同时在零售市
场上也有许多 ODBC Driver。 现在大约有 50多家数据库产品支持 ODBC,包
括 MS SQL Server,Sybase SQL Server,Oracle等客户 /服务器网络数
据库和 FoxPro,dBase,Btrive,Excel等单机数据库, 而且随着 ODBC与
Windows一起发放而变得越来越流行, 越来越多的数据库厂商普遍会在自
己的产品中支持 ODBC,随着数据库产品一起发放专用的 ODBC Driver。
Page 15
4.3.3 Web-DB访问接口技术
?浏览器/服务器的数据访问方式
?Web与数据库的访问接口技术
?数据库访问对象 ADO
?JDBC驱动程序
?基于 JDBC的数据库访问方案
Page 16
浏览器/服务器的数据访问方式
数据 请 求
ODBC
检 索 结 果
客 户 端
浏览 器
客 户 端
浏览 器
WEB
服 务 器
数据 库
服 务 器
Page 17
RDBMS
HTTP
Server
Server
(1)
Browser
(3)
(2)
Application
JDBC Driver
RDBMS Client/无
Java Applet
Page 18
1,CGI技术与数据库
? 当收集到用户的各种信息后, 一般都会将其保存到数据库当中, 以作
为以后分析和使用的原始资料, 这就涉及到如何利用 CGI程序操作数
据库的问题 。 幸运的是, 各种较大型的数据库 ( 包括微软的 SQL
Server在内 ) 都提供了较完备的用户编程 API,利用 API可编制出较高
效率的数据库操作程序 。 特别是各种大型数据库最初一般都运行在
UNIX系统上, 而 C是 UNIX系统上公认的标准编程语言, 因而各种数据
库都提供了对 C语言的 API,而 C语言因其较高的运行效率而同样可作
为一种不错的 CGI编程语言 。 因此, 一般推荐用 C语言编制相应的 CGI
程序操作数据库 。
? 与数据库操作相关的 CGI程序一般按如下过程编制:首先, 利用以上
所讨论过的方法收集用户提交的各种信息, 而后利用数据库提供的
API进行相应数据库操作进行数据的查询, 修改和分析, 最后再按标
准的 CGI输出方法输出结果 。
Page 19
2,PHP与数据库操作
? PHP的数据库功能应该说是它最有用的功能之一 。 它的特点就是内
置了对很多数据库的支持, 而不再需要重新扩充 。 目前 PHP几乎支
持所有的主流数据库, 这就使它的应用有很大的灵活性 。 目前, 在
网站建设特别是中小网站建设方面, Linux + Apache + PHP +
MySQL的配置方式已逐渐成为一种流行趋势, 因此下面将主要以
MySQL数据库的操作方式为例讲述如何利用 PHP操纵数据库 。
Page 20
PHP数据库操作步骤
? ① 连接数据库系统:
? $LinkNo = mysql_connect(主机,用户名,口令 );
? 由于 mysql各用户的口令可以随该用户所在机器 IP地址不同而改变, 因
此必须同时提供主机名, 用户名和口令才能连接到 MySQL数据库中 。 该
函数返回值为一连接号, 这个连接号将在以后的操作中用到 。
? 与数据库系统建立连接常用的另一个函数是:
? $LinkNo = mysql_pconnect(主机,用户名,口令 );
? 与上一个函数不同的地方在于使用本函数连接数据库系统时, 程序会
先寻找是否曾经执行过本函数, 若执行过则传回先前执行的结果 ID。
另外本函数建立的连接无法使用 mysql_close()来关闭 。
Page 21
CONT,PHP数据库操作步骤
? ② 连接数据库
? $Success = mysql_select_db(数据库名,连接号 );
? 该函数的返回值为 true或 false,表示连接数据库是否成功 。
? ③ 执行 SQL语句
? $ResNo = mysql_query(SQL语句,连接号 );
? 此步执行过程中,如果该 SQL语句是 select语句,则返回值为一个结果
号,否则返回值可以不予理会。如果函数执行失败,则返回值为 false
。
Page 22
CONT,PHP数据库操作步骤
? ④ 获取执行结果:方法很多,这里只介绍两种比较常用的方法:
? ·$Result = mysql_fetch_row(结果号 );
? 该函数用来将查询结果放到数组 Result中,该数组通过数字索引,第
一个的索引值为 0。若结果集中已无数据,则函数返回 false。
? ·$Result = mysql_fetch_array(结果号 );
? 本函数用来将查询结果放到数组 Result中,若结果集中已无数据,则
函数返回 false。本函数可以说是上一个函数的加强版,它的结果除可
以用数字索引外,还可采用文字索引,例如,$Result[“Name”]。
? ⑤ 关闭数据库
? $Success = mysql_close(连接号 );
? 关闭与数据库的连接。若未指定连接号,则会关闭最后一次连接。实
际上当 PHP 整页程序结束后,将会自动关闭与数据库的非永久性连接
,因此本函数并非必须执行。执行成功则返回 true,否则返回 false。
Page 23
3,ASP访问数据库步骤
ADO,ActiveX Data Object是微软用于访问数据所创建的技术, 访问
数据的方法之一 。 简单易用, 功能强大 。
( 1) 定义数据源:在 Web服务器上打开, 控制面板,, 选中, ODBC”
,在, 系统 DSN” 下选, 添加,, 选定你希望的数据库种类, 名称, 位
置等 。 本文定义, SQL SERVER”, 数据源为, HT”, 数据库名称为
,HTDATA”, 脚本语言采用 Jscript。
Page 24
( 2)使用 ADO组件查询 WEB数据库
? ( 1)调用 Server.CreateObject方法取得, ADODB.Connection” 的实
例,再使用 Open方法打开数据库:
? conn = Server.CreateObject(, ADODB.Connection” )
? conn.Open(, HT” )
? ( 2)指定要执行的 SQL命令
? 连接数据库后,可对数据库操作,如查询,修改,删除等,这些都是
通过 SQL指令来完成的,如要在数据表 signaltab中查询代码中含有
,X” 的记录:
? sqlStr =, select * from signaltab where code like ‘ %X%’”
? rs = conn.Execute( sqlStr)
Page 25
CONT:使用 ADO组件查询 WEB数据库
? ( 3)使用 RecordSet属性和方法,并显示结果
? 为了更精确地跟踪数据,要用 RecordSet组件创建包含数据的游标,游
标就是储存在内存中的数据。
? rs = Server.CreateObject(, ADODB.RecordSet” )
? rs.Open(sqlStr,conn,1,A) //注,A=1读取,A=3 新增、修改、删除
? 在 RecordSet组件中,常用的属性和方法有:
? rs.Fields.Count,RecordSet对象的字段数。
? rs(i).Name,第 i个字段的名称,i为 0至 rs.Fields.Count-1
? rs(i),第 i个字段的数据,i为 0至 rs.Fields.Count-1
? rs(,字段名, ),指定字段的数据。
? rs.Record.Count:游标中的数据记录总数。
? rs.EOF,是否最后一条记录。 rs.MoveFirst,指向第一条记录。
? ④ 关闭数据库,conn.close()
Page 26
ASP实例
? 下面举一个实例说明如何应用 ASP技术实现对 WEB数据库的访问 。 该实
例是某技术中心商品查询系统中的 Web功能模块开发, 系统要求当用
户输入查询信息, 如:产地或产品类别后, 系统能返回查询结果 。 我
们以产品类别为例,catachoi.asp文件利用 Form标签形成一个查询入
口, 当用户选择了某产品类别, 并按下, Submit” 按钮 后, 它将产品
类别号以 ProdName变量的形式送到 p_result.asp中, p_result.asp根
据 ProdName的值, 使用 SQL语句在服务器端完成数据库表文件的查询
,最后将查询结果送回浏览器端 。
Page 27
catachoi.asp--查询入口,
catachoi.asp
<HTML>
<HEAD>
<TITLE>ActiveX Data Object (ADO)</TITLE>
</HEAD>
<BODY BGCOLOR=#BC8F8F>
<FORM NAME="FrmCata" METHOD="post" ACTION="p_result.asp">
<p>请输入产品类别,<INPUT TYPE="text" NAME="ProName"></p>
<br><INPUT TYPE="submit" VALUE="提 交 " >
<INPUT TYPE="reset" VALUE="清 除 "> </p>
</FORM>
</BODY>
</HTML>
Page 28
p_result.asp--查询并显示
? <HTML>
? <HEAD>
? <TITLE>ActiveX Data Object(ADO)</TITLE>
? </HEAD>
? <BODY BGCOLOR=#BC8F8F>
? <%CATALOGUE=Request.Form("ProName")%>
? <%
? SQL="select * from ECDB where 产品类别 ='"&CATALOGUE&"'"
? Set Conn=Server.CreateObject("ADODB.Connection")
? Conn.Open "SIM_EC"
? Set RS=Server.CreateObject("ADODB.Recordset")
? Set RS=Conn.execute(SQL)
? %>
? <% If RS.eof Then
? Response.Write "<p>对不起 ! 没有产品类型为 <FONT COLOR=red>'"%>
? <%=CATALOGUE%>
? <%Response.Write "'</FONT>的记录,</p></BODY></HTML>"%>
Page 29
? <%Else %>
? <p>有关 <FONT COLOR="ff0080"><%=CATALOGUE%></FONT>的信息如下,</p>
? <TABLE BORDER="1">
? <TR>
? <TD WIDTH="10%" ALIGN="center"> <STRONG>编号 </STRONG></TD>
? <TD WIDTH="20%" ALIGN="center"> <STRONG>厂名 </STRONG></TD>
? <TD WIDTH="20%" ALIGN="center"> <STRONG>厂址 </STRONG></TD>
? <TD WIDTH="10%" ALIGN="center"> <STRONG>电话 </STRONG></TD>
? </TR>
? <%do while not RS.eof%>
? <TR>
? <TD WIDTH="10%" ALIGN="center"><%=RS("ID")%> </TD>
? <TD WIDTH="20%" ALIGN="center"><%=RS("FAC_NAME")%> </TD>
? <TD WIDTH="20%" ALIGN="center"><%=RS("FAC_ADD")%> </TD>
? <TD WIDTH="10%" ALIGN="center"><%=RS("TEL")%> </TD>
? </TR>
? <%
? RS.Movenext
? Loop
Page 30
? RS.Close
? Conn.Close
? %>
? </TABLE>
? <% End If%>
? <FORM METHOD="POST" ACTION="NewAckSimRfq.asp">
? <p><INPUT TYPE="submit" VALUE="进行询价 " NAME="NewRfq"></p>
? </FORM>
? <a HREF="HOMEPAGE.htm"><INPUT TYPE="normal" VALUE="返 回 "></a></p>
? </BODY>
? </HTML>
Page 31
工具
?数据库访问的构造工具
?IBM
?MS
Page 32
3,JDBC
? JDBC提供了与各种数据库系统交互的能力, 是一个能够执行 SQL语句的
JAVA API,包含一组由 JAVA语言编写的类和接口, 使得程序员能够使
用纯 JAVA开发数据库应用 。
?( 1) 传统的 C/S模式
?( 2) 两层结构的 B/S模式
?( 3) 三层结构的 B/S模式
?( 4) JDBC驱动程序
Page 33
( 1) 传统的 C/S模式
? 在这种 C/S模式中, 客户端程序为 Java应用程序 。 它通过 JDBC驱动程序
,将对数据库的操作送给数据库的客户端程序, 由数据库的客户端程
序与其服务器端程序通信 。 如果数据库有客户端与服务器端之分如
SQL Server Oracle,则服务器端可置于其他主机上, 换句话说, 程序
和数据可以分别存储在不同的主机中 。 在这种情况下, 客户端除了装
有应用程序外, 还需要安装要访问的数据库的客户端程序 ( 如 Oracle
的 SQL*Net) 和 JDBC驱动程序 。
? 如果数据库没有客户端与服务器端之分 ( 如 FoxPro,Access), 则
数据库与程序只能在同一台主机上, 即在该模式下只能访问本地数据
库 。 这时 JDBC要借助 ODBC来访问数据库, 因此要安装的数据库客户端
程序就是相应数据库的 ODBC驱动程序 。
Page 34
C/S模式中的 JDBC
Java Application
JDBC Driver
RDBMS客户端程序
RDBMS
Java Application
JDBC Driver
RDBMS
二者不同,不需安装数据库的客户端,
这主要是由于两者采用的 JDBC驱动程序类型不同。
Page 35
( 2)两层结构的 B/S模式
? 在浏览器 /服务器模式下, 客户端演变为浏览器, 服务器端增加了 HTTP Server,JDBC
驱动程序和 Java小应用程序都放在 HTTP Server的某个目录下, 且数据库要同 HTTP
Server放在同一台主机 。 图中 ( 1) 表示浏览器通过浏览 HTTP Server下的页面, 将页面
中标识的小应用程序从服务器下载到客户端, 同时 JDBC驱动程序也被下载下来 。 这里要
说明的是, 这种下载是自动下载, 不需用户参与, 这是 Java小应用程序的特性 。 小应用
程序被下载到客户端后, 通过 JVM解释执行, 调用 JDBC驱动程序即可直接访问远程数据
库 ( 如图中 ( 2) 所示 ) 。
Java Application
JDBC Driver
RDBMS
HTTP
Server
Server
(1)
Browser
(2)
Page 36
( 3)三层结构的 B/S模式
? 三层结构的 B/ S模式是以上两种模式的结合 。 三层结构中浏览器是第一层, 从服务器下
载 Java小应用程序 ( 如图中 ( 2) 所示 ), 实现用户界面和传送数据库访问任务给服务器;服务器是第二层, 小应用程序放在 HTTP Server的某个目录下, 同时有一个应用程序起
中间层的作用, 它接收小应用程序发送给服务器的数据库访问任务 ( 如图中 ( 2) 所示 )
,与本地或其他主机上的数据库连接完成任务 ( 如图中 ( 3) 所示 ), 并将结果送给客户
端;第三层是数据库, 由于访问数据库的程序是应用程序, 没有安全性限制, 所以数据
库与 HTTP Server可以分别放在不同的主机上, 这样便于维护, 也避免了服务器负担过重
的情况 。
RDBMS
HTTP
Server
Server
(1)
Browser
(3)
(2)
Application
JDBC Driver
RDBMS Client/无
Java Applet
Page 37
( 4) JDBC驱动程序
? 上面的解决方案中, 有些需要安装数据库的客户端程序, 有些则不需要, 这是由于它们
所采用的 JDBC驱动程序的不同所造成的 。 在图 6中, JDBC应用编程接口即 JDBC API,
JDBC驱动程序管理器也是 JDBC API的一个类, 它完成驱动程序的选择, 注册等功能 。
Java
应用程序
JDBC应用编程接口
JDBC驱动
程序管理器
JDBC-ODBC
桥接驱动程序
部分 Java
JDBC驱动程序
ODBC
数据库客户机库
数据库
服务器
数据库客户机库
数据库
服务器
Java应用程序
Java Applet
JDBC应用编程接口
JDBC驱动
程序管理器
纯 Java JDBC
驱动程序
纯 Java JDBC驱
动程序
数据库
服务器
数据库中间件
数据库
服务器
Page 38
四类 JDBC驱动程序
? JDBC- ODBC桥接于 ODBC驱动程序 ( JDBC- ODBC Bridge driver),如
图 6中 A所示, 通过 ODBC驱动程序来提供 JDBC对数据库的存取 。 在多数
情况下, ODBC执行码必须装载于客户机上 。 在三层体系结构中, 此种
驱动程序最适合于可以顺利安装客户机的企业网络, 或使用 Java编
写的应用服务器代码 。 目前 JDK1.2中已包含了该驱动程序 ( JavaSoft
定为 1型 ) 。
? 本机应用编程接口部分 Java驱动程序 ( native- API partly-java
driver),如图 6-B所示, 此类驱动程序将 JDBC调用转换成为基于客
户机应用编程接口的调用, 适用于 Oracle,Sybase,Informix,DB2
或其他 DBMS,并需要将部分执行码装载于客户机上 ( JavaSoft定为 2
型 ) 。
Page 39
四类 JDBC驱动程序
? 数据库中间件的纯 Java驱动程序 ( net- protocol all- Java driver
),如图 6- 7中 C所示, 此类驱动程序将 JDBC调用转换成为中间件供
应商的协议, 然后通过中间件服务器将该协议转换为 DBMS协议 。 中间
件可将 Java客户连接到不同的数据库上 ( JavaSoft定为 3型 ) 。
? 直接连接数据库的纯 JAVA驱动程序:如图 D所示, 此类驱动程序将 JDBC
调用转换为 DBMS直接使用的网络协议, 因而容许从客户机直接调用
DBMS服务 。 这一类的驱动程序通常由数据库厂商自己开发 。 (
JavaSoft定为 4型 )
? JavaSoft是 SUN系统公司负责开发 JAVA产品的业务单位, 和数据库与数
据库工具厂商一起建立独立于 DBMS的机制, 使开发人员不必考虑所用
的特定数据库而编写客户级应用程序 。
Page 40
小结
?1、数据库与 WEB并存 --结构化与非结构化数据
?2、数据仓库及数据库体系环境
?3、数据模型
?4、数据库管理系统
?5、数据源接口,ODBC,JDBC
?6,ASP访问方法和步骤:能够读懂
4.3 数据库访问接口技术
–
? 4.3.1 数据库应用体系结构与系统实现技术
? 4.3.2 两层结构数据库系统的访问接口技术
? 4.3.3 Web-DB访问接口技术
Page 2
4.3.1 数据库应用体系结构与系统实现技术
?应用体系结构与数据处理任务分担
?客户 /服务器系统的处理方式
?数据库系统的优化技术
Page 3
应用体系结构与数据处理任务分担
第一 层
客 户 端
第二 层
数据 库
服 务 器
任 务,
用 户 界面
主要的商 业逻辑
和数据 处 理 逻辑
任 务,
服 务 器端的 验证
数据 库访问
Page 4
应用体系结构与数据处理任务分担
第一 层
客 户 端
第二 层
应 用
服 务 器
第三 层
数据 库
服 务 器
任 务,
用 户 界面
任 务,
商 业逻辑
数据 处 理 逻辑
任 务
数据 库访问
Web浏览 器
Web服 务 器
应 用服 务 器
数据 库访问
Page 5
客户 /服务器系统的处理方式
?( 1) 完全分布式处理
?( 2) 完全客户 /服务器
?( 3) 有限客户 /服务器
?( 4) 专用客户 /服务器
Page 6
4.3.2 两层结构数据库系统的访问接口技术
?两层客户 /服务器结构数据库管理机制
?客户应用对数据库的访问
?开放数据库互连 ODBC的技术原理
Page 7
两层客户 /服务器结构数据库管理机制
应 用程序
数据 库 API
网 络 /通信接口
存 储 文件
DBMS核心
数据管理 客 户 管理
网 络 /通信接口
数据 /网 络协议
客 户 端 服 务 器
Page 8
客户应用对数据库的访问
? 在一个包括多个服务器和大量客户的企业级客户 /服务器结构数据
库系统中, 来自不同厂商的客户软件以及用户自己开发的客户应
用要访问不同的服务器中的数据, 这些数据可能存在于不同厂商
的关系数据库, 非关系数据库, 文件系统或其他的系统中 。 要对
这些数据进行透明的访问需要开放的访问接口 。
? ( 1) 专用数据库驱动程序
? ( 2) ODBC
? ( 3) JDBC
Page 9
数据源访问接口技术,ODBC
? Microsoft推出的 ODBC( 开放数据库互连 ) 技术, 旨在为异质数据库的
同时访问提供了公共的 API,以使客户应用对要访问的数据源透明 。
? ODBC实际上是一个数据库访问函数库, 通过它可以使应用程序可以直
接操纵数据库中的数据 。 它是基于 SQL语言的, 是一种在 SQL和应用界
面之间的标准接口, 它解决了嵌入式 SQL接口 ( SQLAPI) 非规范化的矛
盾, 提供了 SQLAPI的规范核心, 免除了应用程序软件随数据库的改变
而改变的痛苦 。 在客户 /服务器结构的数据库系统中, ODBC标准能为不
同的数据源提供统一的数据访问界面, 客户端应用通过 ODBC接口可以
实现对不同数据源的访问 。
Page 10
ODBC示意图
应用程序
驱动程序管理器
驱动程序 驱动程序 驱动程序
数据源 数据源 数据源
数据库 数据库 数据库
Page 11
ODBC工作原理
? ODBC通过驱动程序来提供数据库的独立性 。 驱动程序是一个用以支持
ODBC函数调用的模块 ( 通常是一个动态连接库 DLL) 。 应用程序通过调
用驱动程序所支持的函数来操纵数据库 。 若想使应用程序操作不同类型
的数据库, 就要动态地连接到不同的驱动程序上 。
? 驱动程序管理器为应用程序装人驱动器, 负责管理应用程序中 ODBC函数
和 DLL中函数的绑定, 它还处理几个初始化 ODBC调用, 提供 ODBC函数的
人口点, 对 ODBC调用的参数进行合法性检查等 。
? 客户应用通过调用 ODBC驱动程序管理器 ( Driver Manager) 所提供的
API或调用封装了 ODBC驱动程序管理器 API的类库 ( 对面向对象语言而言
), 对不同数据库的数据源进行操作 。 在数据源和 ODBC API之间起联系
作用的是为不同的数据库专门开发的 ODBC Driver( 见图 5- 8) 。
Page 12
工作原理示意图
VB应用程序 C++应用程序 Delphi程序
ODBC接口 ODBC接口 ODBC接口
ODBC( SQL语言)
ODBC驱称 ODBC驱称 ODBC驱称
SQL数据库 VFP数据库 DB数据库
Page 13
ODBC工作原理分析
? ODBC采用的一致性级别构成了其功能分区的最高种类,为应用和驱动
提供了一种满足各自特殊需要的 API方法,保持了与 SQL标准的一致
。故而 ODBC定义了两种一致性级别,API一致性和 SQL一致性。
? ODBC的 API一致性级别分为三级:核心级、扩展 Ⅰ 级和扩展 Ⅱ 级。核
心级包括最基本的功能,由 23个函数,包括分配、释放环境句柄、数
据库连接、执行 SQL语句等。核心级函数能满足最基本的应用程序要
求。扩展 Ⅰ 级在核心级的基础上增加了 19个函数,通过它们可以在应
用程序中动态地了解表的模式,可用的概念数据类型及它们的名称等
。扩展 Ⅱ 级在扩展 Ⅰ 级的基础上再增加 19个函数,通过它们可以了
解到关于主码和外码的信息,表和列的权限信息,数据库中的存储过
程信息等,并且还有更强的游标和并发控制功能。
Page 14
CONT,ODBC工作原理分析
? SQL一致性也有 3种:最低 SQL、核心 SQL和扩展 SQL。其中最低 SQL提
供了一个最大交集范围的 SQL子集,以便使应用程序可以轻松地进行交互
操作。扩展 SQL则描述了独特于 ODBC的 SQL扩充,它为许多 DBMS支持的
高级 SQL特性与数据类型提供了一种方便的途径,如外层连接、标量函数
、存储过程援引等等。
? Driver的作用主要包括联结数据库管理, 错误处理管理, 数据类型转换
以及对各种 DBMS以不同方式提供的目录 ( 表及其他对象 ) 进行访问管理
和 DBMS的各种信息 。 其中既包括 Microsoft提供的标准件, 也包括数据
库厂商为支持 ODBC而自己开发的数据库产品 ODBC Driver,同时在零售市
场上也有许多 ODBC Driver。 现在大约有 50多家数据库产品支持 ODBC,包
括 MS SQL Server,Sybase SQL Server,Oracle等客户 /服务器网络数
据库和 FoxPro,dBase,Btrive,Excel等单机数据库, 而且随着 ODBC与
Windows一起发放而变得越来越流行, 越来越多的数据库厂商普遍会在自
己的产品中支持 ODBC,随着数据库产品一起发放专用的 ODBC Driver。
Page 15
4.3.3 Web-DB访问接口技术
?浏览器/服务器的数据访问方式
?Web与数据库的访问接口技术
?数据库访问对象 ADO
?JDBC驱动程序
?基于 JDBC的数据库访问方案
Page 16
浏览器/服务器的数据访问方式
数据 请 求
ODBC
检 索 结 果
客 户 端
浏览 器
客 户 端
浏览 器
WEB
服 务 器
数据 库
服 务 器
Page 17
RDBMS
HTTP
Server
Server
(1)
Browser
(3)
(2)
Application
JDBC Driver
RDBMS Client/无
Java Applet
Page 18
1,CGI技术与数据库
? 当收集到用户的各种信息后, 一般都会将其保存到数据库当中, 以作
为以后分析和使用的原始资料, 这就涉及到如何利用 CGI程序操作数
据库的问题 。 幸运的是, 各种较大型的数据库 ( 包括微软的 SQL
Server在内 ) 都提供了较完备的用户编程 API,利用 API可编制出较高
效率的数据库操作程序 。 特别是各种大型数据库最初一般都运行在
UNIX系统上, 而 C是 UNIX系统上公认的标准编程语言, 因而各种数据
库都提供了对 C语言的 API,而 C语言因其较高的运行效率而同样可作
为一种不错的 CGI编程语言 。 因此, 一般推荐用 C语言编制相应的 CGI
程序操作数据库 。
? 与数据库操作相关的 CGI程序一般按如下过程编制:首先, 利用以上
所讨论过的方法收集用户提交的各种信息, 而后利用数据库提供的
API进行相应数据库操作进行数据的查询, 修改和分析, 最后再按标
准的 CGI输出方法输出结果 。
Page 19
2,PHP与数据库操作
? PHP的数据库功能应该说是它最有用的功能之一 。 它的特点就是内
置了对很多数据库的支持, 而不再需要重新扩充 。 目前 PHP几乎支
持所有的主流数据库, 这就使它的应用有很大的灵活性 。 目前, 在
网站建设特别是中小网站建设方面, Linux + Apache + PHP +
MySQL的配置方式已逐渐成为一种流行趋势, 因此下面将主要以
MySQL数据库的操作方式为例讲述如何利用 PHP操纵数据库 。
Page 20
PHP数据库操作步骤
? ① 连接数据库系统:
? $LinkNo = mysql_connect(主机,用户名,口令 );
? 由于 mysql各用户的口令可以随该用户所在机器 IP地址不同而改变, 因
此必须同时提供主机名, 用户名和口令才能连接到 MySQL数据库中 。 该
函数返回值为一连接号, 这个连接号将在以后的操作中用到 。
? 与数据库系统建立连接常用的另一个函数是:
? $LinkNo = mysql_pconnect(主机,用户名,口令 );
? 与上一个函数不同的地方在于使用本函数连接数据库系统时, 程序会
先寻找是否曾经执行过本函数, 若执行过则传回先前执行的结果 ID。
另外本函数建立的连接无法使用 mysql_close()来关闭 。
Page 21
CONT,PHP数据库操作步骤
? ② 连接数据库
? $Success = mysql_select_db(数据库名,连接号 );
? 该函数的返回值为 true或 false,表示连接数据库是否成功 。
? ③ 执行 SQL语句
? $ResNo = mysql_query(SQL语句,连接号 );
? 此步执行过程中,如果该 SQL语句是 select语句,则返回值为一个结果
号,否则返回值可以不予理会。如果函数执行失败,则返回值为 false
。
Page 22
CONT,PHP数据库操作步骤
? ④ 获取执行结果:方法很多,这里只介绍两种比较常用的方法:
? ·$Result = mysql_fetch_row(结果号 );
? 该函数用来将查询结果放到数组 Result中,该数组通过数字索引,第
一个的索引值为 0。若结果集中已无数据,则函数返回 false。
? ·$Result = mysql_fetch_array(结果号 );
? 本函数用来将查询结果放到数组 Result中,若结果集中已无数据,则
函数返回 false。本函数可以说是上一个函数的加强版,它的结果除可
以用数字索引外,还可采用文字索引,例如,$Result[“Name”]。
? ⑤ 关闭数据库
? $Success = mysql_close(连接号 );
? 关闭与数据库的连接。若未指定连接号,则会关闭最后一次连接。实
际上当 PHP 整页程序结束后,将会自动关闭与数据库的非永久性连接
,因此本函数并非必须执行。执行成功则返回 true,否则返回 false。
Page 23
3,ASP访问数据库步骤
ADO,ActiveX Data Object是微软用于访问数据所创建的技术, 访问
数据的方法之一 。 简单易用, 功能强大 。
( 1) 定义数据源:在 Web服务器上打开, 控制面板,, 选中, ODBC”
,在, 系统 DSN” 下选, 添加,, 选定你希望的数据库种类, 名称, 位
置等 。 本文定义, SQL SERVER”, 数据源为, HT”, 数据库名称为
,HTDATA”, 脚本语言采用 Jscript。
Page 24
( 2)使用 ADO组件查询 WEB数据库
? ( 1)调用 Server.CreateObject方法取得, ADODB.Connection” 的实
例,再使用 Open方法打开数据库:
? conn = Server.CreateObject(, ADODB.Connection” )
? conn.Open(, HT” )
? ( 2)指定要执行的 SQL命令
? 连接数据库后,可对数据库操作,如查询,修改,删除等,这些都是
通过 SQL指令来完成的,如要在数据表 signaltab中查询代码中含有
,X” 的记录:
? sqlStr =, select * from signaltab where code like ‘ %X%’”
? rs = conn.Execute( sqlStr)
Page 25
CONT:使用 ADO组件查询 WEB数据库
? ( 3)使用 RecordSet属性和方法,并显示结果
? 为了更精确地跟踪数据,要用 RecordSet组件创建包含数据的游标,游
标就是储存在内存中的数据。
? rs = Server.CreateObject(, ADODB.RecordSet” )
? rs.Open(sqlStr,conn,1,A) //注,A=1读取,A=3 新增、修改、删除
? 在 RecordSet组件中,常用的属性和方法有:
? rs.Fields.Count,RecordSet对象的字段数。
? rs(i).Name,第 i个字段的名称,i为 0至 rs.Fields.Count-1
? rs(i),第 i个字段的数据,i为 0至 rs.Fields.Count-1
? rs(,字段名, ),指定字段的数据。
? rs.Record.Count:游标中的数据记录总数。
? rs.EOF,是否最后一条记录。 rs.MoveFirst,指向第一条记录。
? ④ 关闭数据库,conn.close()
Page 26
ASP实例
? 下面举一个实例说明如何应用 ASP技术实现对 WEB数据库的访问 。 该实
例是某技术中心商品查询系统中的 Web功能模块开发, 系统要求当用
户输入查询信息, 如:产地或产品类别后, 系统能返回查询结果 。 我
们以产品类别为例,catachoi.asp文件利用 Form标签形成一个查询入
口, 当用户选择了某产品类别, 并按下, Submit” 按钮 后, 它将产品
类别号以 ProdName变量的形式送到 p_result.asp中, p_result.asp根
据 ProdName的值, 使用 SQL语句在服务器端完成数据库表文件的查询
,最后将查询结果送回浏览器端 。
Page 27
catachoi.asp--查询入口,
catachoi.asp
<HTML>
<HEAD>
<TITLE>ActiveX Data Object (ADO)</TITLE>
</HEAD>
<BODY BGCOLOR=#BC8F8F>
<FORM NAME="FrmCata" METHOD="post" ACTION="p_result.asp">
<p>请输入产品类别,<INPUT TYPE="text" NAME="ProName"></p>
<br><INPUT TYPE="submit" VALUE="提 交 " >
<INPUT TYPE="reset" VALUE="清 除 "> </p>
</FORM>
</BODY>
</HTML>
Page 28
p_result.asp--查询并显示
? <HTML>
? <HEAD>
? <TITLE>ActiveX Data Object(ADO)</TITLE>
? </HEAD>
? <BODY BGCOLOR=#BC8F8F>
? <%CATALOGUE=Request.Form("ProName")%>
? <%
? SQL="select * from ECDB where 产品类别 ='"&CATALOGUE&"'"
? Set Conn=Server.CreateObject("ADODB.Connection")
? Conn.Open "SIM_EC"
? Set RS=Server.CreateObject("ADODB.Recordset")
? Set RS=Conn.execute(SQL)
? %>
? <% If RS.eof Then
? Response.Write "<p>对不起 ! 没有产品类型为 <FONT COLOR=red>'"%>
? <%=CATALOGUE%>
? <%Response.Write "'</FONT>的记录,</p></BODY></HTML>"%>
Page 29
? <%Else %>
? <p>有关 <FONT COLOR="ff0080"><%=CATALOGUE%></FONT>的信息如下,</p>
? <TABLE BORDER="1">
? <TR>
? <TD WIDTH="10%" ALIGN="center"> <STRONG>编号 </STRONG></TD>
? <TD WIDTH="20%" ALIGN="center"> <STRONG>厂名 </STRONG></TD>
? <TD WIDTH="20%" ALIGN="center"> <STRONG>厂址 </STRONG></TD>
? <TD WIDTH="10%" ALIGN="center"> <STRONG>电话 </STRONG></TD>
? </TR>
? <%do while not RS.eof%>
? <TR>
? <TD WIDTH="10%" ALIGN="center"><%=RS("ID")%> </TD>
? <TD WIDTH="20%" ALIGN="center"><%=RS("FAC_NAME")%> </TD>
? <TD WIDTH="20%" ALIGN="center"><%=RS("FAC_ADD")%> </TD>
? <TD WIDTH="10%" ALIGN="center"><%=RS("TEL")%> </TD>
? </TR>
? <%
? RS.Movenext
? Loop
Page 30
? RS.Close
? Conn.Close
? %>
? </TABLE>
? <% End If%>
? <FORM METHOD="POST" ACTION="NewAckSimRfq.asp">
? <p><INPUT TYPE="submit" VALUE="进行询价 " NAME="NewRfq"></p>
? </FORM>
? <a HREF="HOMEPAGE.htm"><INPUT TYPE="normal" VALUE="返 回 "></a></p>
? </BODY>
? </HTML>
Page 31
工具
?数据库访问的构造工具
?IBM
?MS
Page 32
3,JDBC
? JDBC提供了与各种数据库系统交互的能力, 是一个能够执行 SQL语句的
JAVA API,包含一组由 JAVA语言编写的类和接口, 使得程序员能够使
用纯 JAVA开发数据库应用 。
?( 1) 传统的 C/S模式
?( 2) 两层结构的 B/S模式
?( 3) 三层结构的 B/S模式
?( 4) JDBC驱动程序
Page 33
( 1) 传统的 C/S模式
? 在这种 C/S模式中, 客户端程序为 Java应用程序 。 它通过 JDBC驱动程序
,将对数据库的操作送给数据库的客户端程序, 由数据库的客户端程
序与其服务器端程序通信 。 如果数据库有客户端与服务器端之分如
SQL Server Oracle,则服务器端可置于其他主机上, 换句话说, 程序
和数据可以分别存储在不同的主机中 。 在这种情况下, 客户端除了装
有应用程序外, 还需要安装要访问的数据库的客户端程序 ( 如 Oracle
的 SQL*Net) 和 JDBC驱动程序 。
? 如果数据库没有客户端与服务器端之分 ( 如 FoxPro,Access), 则
数据库与程序只能在同一台主机上, 即在该模式下只能访问本地数据
库 。 这时 JDBC要借助 ODBC来访问数据库, 因此要安装的数据库客户端
程序就是相应数据库的 ODBC驱动程序 。
Page 34
C/S模式中的 JDBC
Java Application
JDBC Driver
RDBMS客户端程序
RDBMS
Java Application
JDBC Driver
RDBMS
二者不同,不需安装数据库的客户端,
这主要是由于两者采用的 JDBC驱动程序类型不同。
Page 35
( 2)两层结构的 B/S模式
? 在浏览器 /服务器模式下, 客户端演变为浏览器, 服务器端增加了 HTTP Server,JDBC
驱动程序和 Java小应用程序都放在 HTTP Server的某个目录下, 且数据库要同 HTTP
Server放在同一台主机 。 图中 ( 1) 表示浏览器通过浏览 HTTP Server下的页面, 将页面
中标识的小应用程序从服务器下载到客户端, 同时 JDBC驱动程序也被下载下来 。 这里要
说明的是, 这种下载是自动下载, 不需用户参与, 这是 Java小应用程序的特性 。 小应用
程序被下载到客户端后, 通过 JVM解释执行, 调用 JDBC驱动程序即可直接访问远程数据
库 ( 如图中 ( 2) 所示 ) 。
Java Application
JDBC Driver
RDBMS
HTTP
Server
Server
(1)
Browser
(2)
Page 36
( 3)三层结构的 B/S模式
? 三层结构的 B/ S模式是以上两种模式的结合 。 三层结构中浏览器是第一层, 从服务器下
载 Java小应用程序 ( 如图中 ( 2) 所示 ), 实现用户界面和传送数据库访问任务给服务器;服务器是第二层, 小应用程序放在 HTTP Server的某个目录下, 同时有一个应用程序起
中间层的作用, 它接收小应用程序发送给服务器的数据库访问任务 ( 如图中 ( 2) 所示 )
,与本地或其他主机上的数据库连接完成任务 ( 如图中 ( 3) 所示 ), 并将结果送给客户
端;第三层是数据库, 由于访问数据库的程序是应用程序, 没有安全性限制, 所以数据
库与 HTTP Server可以分别放在不同的主机上, 这样便于维护, 也避免了服务器负担过重
的情况 。
RDBMS
HTTP
Server
Server
(1)
Browser
(3)
(2)
Application
JDBC Driver
RDBMS Client/无
Java Applet
Page 37
( 4) JDBC驱动程序
? 上面的解决方案中, 有些需要安装数据库的客户端程序, 有些则不需要, 这是由于它们
所采用的 JDBC驱动程序的不同所造成的 。 在图 6中, JDBC应用编程接口即 JDBC API,
JDBC驱动程序管理器也是 JDBC API的一个类, 它完成驱动程序的选择, 注册等功能 。
Java
应用程序
JDBC应用编程接口
JDBC驱动
程序管理器
JDBC-ODBC
桥接驱动程序
部分 Java
JDBC驱动程序
ODBC
数据库客户机库
数据库
服务器
数据库客户机库
数据库
服务器
Java应用程序
Java Applet
JDBC应用编程接口
JDBC驱动
程序管理器
纯 Java JDBC
驱动程序
纯 Java JDBC驱
动程序
数据库
服务器
数据库中间件
数据库
服务器
Page 38
四类 JDBC驱动程序
? JDBC- ODBC桥接于 ODBC驱动程序 ( JDBC- ODBC Bridge driver),如
图 6中 A所示, 通过 ODBC驱动程序来提供 JDBC对数据库的存取 。 在多数
情况下, ODBC执行码必须装载于客户机上 。 在三层体系结构中, 此种
驱动程序最适合于可以顺利安装客户机的企业网络, 或使用 Java编
写的应用服务器代码 。 目前 JDK1.2中已包含了该驱动程序 ( JavaSoft
定为 1型 ) 。
? 本机应用编程接口部分 Java驱动程序 ( native- API partly-java
driver),如图 6-B所示, 此类驱动程序将 JDBC调用转换成为基于客
户机应用编程接口的调用, 适用于 Oracle,Sybase,Informix,DB2
或其他 DBMS,并需要将部分执行码装载于客户机上 ( JavaSoft定为 2
型 ) 。
Page 39
四类 JDBC驱动程序
? 数据库中间件的纯 Java驱动程序 ( net- protocol all- Java driver
),如图 6- 7中 C所示, 此类驱动程序将 JDBC调用转换成为中间件供
应商的协议, 然后通过中间件服务器将该协议转换为 DBMS协议 。 中间
件可将 Java客户连接到不同的数据库上 ( JavaSoft定为 3型 ) 。
? 直接连接数据库的纯 JAVA驱动程序:如图 D所示, 此类驱动程序将 JDBC
调用转换为 DBMS直接使用的网络协议, 因而容许从客户机直接调用
DBMS服务 。 这一类的驱动程序通常由数据库厂商自己开发 。 (
JavaSoft定为 4型 )
? JavaSoft是 SUN系统公司负责开发 JAVA产品的业务单位, 和数据库与数
据库工具厂商一起建立独立于 DBMS的机制, 使开发人员不必考虑所用
的特定数据库而编写客户级应用程序 。
Page 40
小结
?1、数据库与 WEB并存 --结构化与非结构化数据
?2、数据仓库及数据库体系环境
?3、数据模型
?4、数据库管理系统
?5、数据源接口,ODBC,JDBC
?6,ASP访问方法和步骤:能够读懂