(数据库系统基础、设计及应用)第6章数据库应用程序.ppt

上传人:marr****208 文档编号:133872449 上传时间:2020-05-31 格式:PPT 页数:109 大小:1.41MB
返回 下载 相关 举报
(数据库系统基础、设计及应用)第6章数据库应用程序.ppt_第1页
第1页 / 共109页
(数据库系统基础、设计及应用)第6章数据库应用程序.ppt_第2页
第2页 / 共109页
(数据库系统基础、设计及应用)第6章数据库应用程序.ppt_第3页
第3页 / 共109页
(数据库系统基础、设计及应用)第6章数据库应用程序.ppt_第4页
第4页 / 共109页
(数据库系统基础、设计及应用)第6章数据库应用程序.ppt_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《(数据库系统基础、设计及应用)第6章数据库应用程序.ppt》由会员分享,可在线阅读,更多相关《(数据库系统基础、设计及应用)第6章数据库应用程序.ppt(109页珍藏版)》请在金锄头文库上搜索。

1、6 1程序设计方法6 2嵌入式与动态SQL6 3存储过程6 4数据库接口6 5MFC的ODBC类6 6数据库应用程序实验6数据库应用程序 第6章数据库应用程序 1 嵌入式SQLSQL语言的主要功能是定义和操纵数据库中的数据 它并不是通用的程序设计语言 因此 当一个程序既要访问数据库又要处理数据时 可将SQL语句嵌入用某种通用的程序设计语言 如C Basic 编写的程序中 由SQL语句负责数据库中数据的定义 查询和操纵 由高级语言语句负责控制程序流程和处理数据 这种使用SQL语言的方式称为嵌入式SQL 如果某种语言编写的程序中包含SQL语句 则称之为宿主语言 其中的SQL语句称为数据子语言 6

2、1程序设计方法 将SQL语言的数据库访问功能和宿主语言的流程控制功能相结合的程序中 包含两种不同计算模型的语句 一种是描述性的面向集合的操作语句SQL 一种是过程性的高级语言语句 因此 它们之间必须互相通信才能协调工作 一般地 嵌入的SQL语句要用一个特殊前缀 如字符串EXECSQL 来标识 预编译器先扫描源程序代码 找出SQL语句 然后将它们抽出来提交给DBMS执行 2 数据库引擎不同种类数据库的数据格式及内部实现机制各不相同 在通过高级语言以及软件开发工具 如VisualBasic Java和VisualC 编写程序来访问数据库时 必须通过某种中介程序连接到数据库 这种开发工具与数据库之间

3、的中介程序称为数据库引擎 数据库引擎将SQL语句转化为对数据库中数据的操作 例如 如果输入了一个SELECT语句 数据库引擎便将其转化为数据库中数据的查询操作 可将数据库引擎看做实现数据库调用的函数库 它为应用程序访问数据库提供了接口 可称之为API ApplicationProgrammingInterface 应用编程接口 这类函数库包括连接数据库的函数和执行SQL语句的函数等 在这类函数中 实际执行的SQL命令都是以函数的参数形式包含在函数调用中的 目前较为流行的数据库接口有ODBC ADO和JDBC等 其中ODBC OpenDataBaseConnectivity 开放数据库互连 是微

4、软开发的一种应用较广的数据库引擎 3 RDBMS自有的数据库编程功能多数商业RDBMS都具备一定的数据库编程功能 例如 MicrosoftAccess中嵌入了与VisualBasic兼容的VBA VisualBasicApplication 可以很方便地连接Access数据库并构建功能强且用户界面友好的数据库应用程序 又如 MicrosoftSQLServer运行的T SQL语言扩充了标准SQL语言的功能 引入触发器 存储过程等数据库对象以及通用程序设计语言中的条件 循环结构等复杂控制结构来增强程序设计功能 4 数据库应用程序的一般结构数据库系统中的应用程序涉及两部分内容 一部分是使用DBMS

5、以及其他工具创建的数据库 其中包含表 视图和存储过程等各种对象 另一部分是使用程序设计语言以及软件开发环境构建的应用程序 这种程序通过特定的数据库引擎连接数据库并通过某种方式来访问和处理数据库中的数据 最基本的数据库应用程序的一般结构如图6 1所示 未表示网络构型的概念结构 图6 1数据库应用程序的一般结构 5 C S模式与B S模式一般地 DBMS 如MicrosoftAccess 和数据库应用程序可以驻留或运行在同一台计算机上 两者甚至可以结合在同一个程序中 以前使用的大多数数据库系统都是这样设计的 但是随着数据库技术的发展 数据库系统经常采用C S Client Server 客户 服务

6、器 模式 C S数据库将所有数据和DBMS都放在服务器上 应用程序运行在一个或多个客户机 用户工作站 上 并且通过网络与运行在其他计算机 服务器 上的一个或多个DBMS通信 客户机通过标准SQL语句等方式来访问服务器上存储的数据库中的数据 由于这种结构将数据和对数据的管理都统一放在了服务器上 保证了数据的安全性和完整性 同时也可以充分利用服务器高性能的特点 随着数据库应用的拓展 三层结构的数据库系统也不断发展 逐步取代了某些领域中客户 服务器结构的数据库 这种结构的数据库中 客户和数据库服务器之间增加了一个应用服务器 于是 原先必须在客户上实现的复杂业务逻辑 全部集中到中间件上 完成了客户端的

7、 减肥 甚至客户端软件只需要安装普通的浏览器即可 在这种模式下 是中间件通过数据库引擎来访问数据库 由于因特网的发展和普及 为了能够随时随地操纵和共享信息 又产生了B S Browser Server 浏览器 服务器 模式 B S模式按功能至少可分为三层 即客户层 应用层 中间层 和数据层 客户层主要指通用浏览器 可以在连接到互联网的各种计算机上运行 数据层指的是运行数据库的服务器 应用层位于应用程序服务器上 运行数据库应用程序 应用程序服务器和数据库服务器一般都是同一家网络公司的设备 有时这两个服务器可能合二为一 运行在一台计算机上 但原理上仍是三层 各层之间存在数据交换 客户层一般不能直接

8、访问数据层 如图6 2所示 图6 2浏览器 服务器模式 嵌入式SQL语句或者其中的参数在编译程序时就是已知的 称为静态SQL 有时候 SQL语句或者其中的参数在编译程序时无法确定而只能在运行时生成 称为动态SQL 动态SQL更加灵活且功能更强 注 MicrosoftSQLServer2000中仍然支持用于C语言的嵌入式SQLAPI 但在SQLServer以后的版本中 不再包含在使用此API的应用程序上进行编程工作所需要的文件 在SQLServer的下一版本中 仍然支持用于C语言的嵌入式SQL编写的现有应用程序的连接 但在以后的版本中也将不再提供这种支持 6 2嵌入式与动态SQL 6 2 1嵌入

9、式SQL的使用1 嵌入式SQL的工作方式为了使用嵌入式SQL 数据库厂商需要在DBMS之外提供一些工具 并在技术上解决以下问题 1 宿主语言的编译器一般不接受和处理SQL语句 故嵌入式程序中应有区分SQL语句和宿主语言语句的标记 2 如何在宿主语言的应用程序与DBMS之间传递信息 3 一条SQL语句原则上可产生或处理一组记录 而宿主语言一次只能处理一条记录 必须协调这两种不同的处理方式 将数据库中数据的查询结果逐次赋值给宿主语言程序中的变量以便处理 4 进行必要的数据类型转换 数据库与宿主语言中的数据类型可能会有差异 为了解决这些问题 数据库厂商往往提供一个嵌入式SQL的预编译器 将包含嵌入式

10、SQL语句的宿主语言 如C语言 源码转换成纯宿主语言的代码 这样一来 源码即可使用宿主语言对应的编译器进行编译 通常情况下 经过嵌入式SQL预编译之后 原有的嵌入式SQL会被转换成一系列函数调用 因此 数据库厂商还需要提供相应的函数库以确保链接器能够将代码中的函数调用与对应的实现链接起来 如图6 3所示 图6 3嵌入了SQL的C语言程序的工作流程 2 嵌入式SQL的一般形式在嵌入式SQL中 为了区分SQL语句与宿主语言语句 所有SQL语句都必须加前缀EXECSQL SQL语句的结束标志则随宿主语言的不同而不同 例如 在C和PL 1中以分号 结束 在COBOL中以END EXEC结束 这样 以C

11、或PL 1作为主语言的嵌入式SQL语句的一般形式为EXECSQL 其中 EXECSQL本身不区分大小写 在EXECSQL和分号之间只能包含有效的SQL语句而不能包含宿主语言语句 例如 删除Stu表的嵌入式SQL语句为EXECSQLDROPTABLEStu 3 嵌入式SQL与宿主语言之间的信息传递DBMS和宿主语言程序之间的数据传递方式主要包括 1 宿主语言向SQL语句提供参数 主要通过主变量实现 主变量就是宿主语言程序中的变量 通过主变量 不仅宿主语言可以向SQL语句提供参数 SQL语句也可对主变量赋值或设置状态信息返回给应用程序 使应用程序得到SQL语句的结果和状态 2 向宿主语言传递SQL

12、语句的执行状态信息 使宿主语言能够据此控制程序流程 主要通过SQL通信区实现 SQL通信区是一个系统定义的主变量 用于应用程序和DBMS通信 只需在嵌入的可执行SQL语句前加上INCLUDE语句即可使用 其格式为EXECSQLINCLUDESOLCA 3 将SQL语句的数据库查询结果交给宿主语言做进一步处理 主要通过主变量和游标实现 游标是系统为用户开设的一个数据缓冲区 用于存放SQL语句的执行结果 每个游标都有一个名字 用户可以用SQL语句逐个从游标中获取记录并赋予主变量 由宿主语言做进一步处理 例6 1 查询数据库并逐个输出结果集中的记录 假定当前数据库中有一个表 其关系模式为Course

13、s courseID courseName credit classHour 通过嵌入式SQL语句查询其中三个字段并通过C程序逐个输出所有记录的程序如下 定义SQL通信区 EXECSQLINCLUDESQLCA 说明主变量 EXECSQLBEGINDECLARESECTION CHARcID 8 CHARcName 20 INTcHour EXECSQLENDDECLARESECTION main 定义游标 EXECSQLDECLAREC1CURSORFOR 查询Courses表中三个字段 SELECTcourseID courseName classHourFROMCourses 打开游标

14、EXECSQLOPENC1 循环输出查询结果集中所有记录 for 当前数据放入主变量并推进游标指针 EXECSQLFETCHC1INTO cID cName cHour 判断SQL通信区状态 不成功则退出循环 if sqlca sqlcodeSUCCESS break printf CourseID s ClassHour d cID cHour printf courseName s cName 关闭游标 EXECSQLCLOSEC1 说明 1 SQL通信区SQLCA是一个全局变量 只需在嵌入的可执行语句之前加上INCLUDE即可使用 SQLCA SQLCODE是SQLCA的一个分量 属于整

15、数类型 用于DBMS向应用程序报告SQL的执行情况 每执行一条SQL语句 就返回一个SQLCODE代码 2 SQL语句引用主变量时 变量前加冒号 以区别于数据库对象名 列名 表名 视图名等 而宿主语言中引用主变量时不必加 3 程序中的DECLARE语句为一条SELECT语句定义了游标C1 SELECT语句的结果集是一个新的关系 当C1向前推进 FETCH 时 可以逐个指向新关系的每条记录 6 2 2动态SQL的概念嵌入式SQL语句的结构是固定的 也就是说 其中引用的表和列以及主变量的个数与数据类型在预编译时就已经确定了 只有主变量的值是在程序运行过程中动态输入的 故称为静态SQL语句 但在很多

16、情况下 SQL语句或其中的参数不能在编译时确定而只能在运行时生成 尤其是CREARE和DROP这样的DDL 数据定义语言 语句 不可能以嵌入式SQL语句来使用 这就只能使用动态SQL语句了 动态SQL语句允许应用程序向数据库发送任何查询 而且可以像发送查询一样地向数据库发送DDL命令 使用动态SQL语句的一般方式 不在程序源代码中嵌入SQL语句 而是在程序运行时以文本形式构建SQL语句 并将SQL语句文本传递给DBMS去执行 常用的有SQL语句主变量 动态参数和动态游标三种动态SQL形式 例6 2 使用SQL语句主变量 这里的程序主变量包含的是SQL语句的内容而不是原来保存数据的输入或者输出的主变量 称为SQL语句主变量 它可以在程序执行期间设定不同的SQL语句并立即执行 EXECSQLBEGINDECLARESECTION 定义SQL语句主变量 constchar stmt CREATETABLEmytest EXECSQLENDDECLARESECTION EXECSQLEXECUTEIMMEDIATE stmt 执行SQL语句 其中使用了EXECUTEIMMEDIATE命令执行S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号