第9章-数据库访问与系统建模要点课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第9章-数据库访问与系统建模要点课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 访问 系统 建模 要点 课件
- 资源描述:
-
1、9.1 9.1 数据库访问概述数据库访问概述9.2 9.2 嵌入式嵌入式SQLSQL第第9章章 数据库数据库访问与系统建模访问与系统建模9.3 9.3 数据库接口数据库接口技术技术9.4 9.4 数据库数据库系统建系统建模方法模方法n应用程序与应用程序与SQLSQL数据库联系的基本方式有:数据库联系的基本方式有:n(1 1)嵌入式)嵌入式SQLSQL或者动态或者动态SQLSQLn(2 2)数据库接口)数据库接口n(3 3)SQLSQL模块模块借助高级语言的功能实现过借助高级语言的功能实现过程化控制与高级计算。程化控制与高级计算。通过应用程序编程接口(通过应用程序编程接口(APIAPI)函数中)
2、函数中的参数的参数-SQL-SQL语句,来使用数据库。语句,来使用数据库。利用利用SQLSQL扩展过程包的功能编程,调用程序模块,扩展过程包的功能编程,调用程序模块,来操作数据库。来操作数据库。SQLSQL模块是对模块是对SQLSQL语句的过程化扩语句的过程化扩展,常用于数据库服务器的编程。展,常用于数据库服务器的编程。9.2 嵌入式嵌入式 SQL一、概述一、概述SQLSQL分分:交互式交互式嵌入式嵌入式为何引入嵌入式为何引入嵌入式:过程化应用过程化应用复杂数据处理复杂数据处理主语言作用:主语言作用:负责控制流程及处理操负责控制流程及处理操纵结果。纵结果。嵌入式嵌入式 SQLSQL作用:作用:
3、负责操纵负责操纵DBDB。两种实现方法:两种实现方法:预编译预编译 扩充、修改主语言编译扩充、修改主语言编译程序使之能处理程序使之能处理SQLSQL 预编译方法:预编译方法:预处理程序预处理程序 宿主语言语句宿主语言语句+函数调用函数调用宿主语言编译程序宿主语言编译程序目标程序目标程序连接程序连接程序 可执行程序可执行程序 OS OS 运行结果运行结果宿主语言语句宿主语言语句+嵌入式嵌入式SQLSQL语句语句9.2 嵌入式嵌入式 SQL二、嵌入式二、嵌入式SQLSQL的工作原理的工作原理 1.1.嵌入式嵌入式SQLSQL与主语言的接口与主语言的接口 nSQLSQL语句:面向集合语句:面向集合
4、主语言语句主语言语句:过程性、记录式过程性、记录式(1)(1)状态变量状态变量SQLSTATE SQLSTATE 描述系统当前状态和运行情况描述系统当前状态和运行情况 0 一般类别一般类别特殊子类特殊子类SQLSTATE SQLSTATE 的格式的格式 在每一个在每一个SQLSQL语句执行之后,语句执行之后,DBMSDBMS将描述当前工作状态和运将描述当前工作状态和运行环境的一个状态值放入行环境的一个状态值放入SQLSTATESQLSTATE中。中。(2)(2)主变量主变量 SQLSQL语句中使用的主语言语句中使用的主语言程序变量称为主变量。程序变量称为主变量。输入主变量输入主变量 由应用程序
5、对其赋值,由应用程序对其赋值,SQLSQL语句引用。语句引用。输出主变量输出主变量 由由SQLSQL语句对其赋值或置语句对其赋值或置状态,返应用程序。状态,返应用程序。9.2 嵌入式嵌入式 SQL(3)(3)游标游标(Cursor)(Cursor)游标游标是系统开设的一个数据缓冲区,存放是系统开设的一个数据缓冲区,存放SQLSQL语语句的执行结果。句的执行结果。作用:作用:用户可以通过游标获取纪录,并赋给主变用户可以通过游标获取纪录,并赋给主变量,交主语言处理。量,交主语言处理。游标名游标名.一条纪录一条纪录主变量主变量游标游标指针指针SQLSQL查查询结果询结果 9.2 嵌入式嵌入式 SQL
6、n2 2、嵌入式、嵌入式SQLSQL需解决的问题:需解决的问题:n(1)(1)如何区分如何区分SQLSQL与主语言语句与主语言语句?v前缀加前缀加EXEC SQLEXEC SQL,结束处用,结束处用ENDENDEXEC(EXEC(或用分号或用分号)v例:嵌入到例:嵌入到C C程序中:程序中:EXEC SQLEXEC SQL SQL ;嵌入到嵌入到JavaJava程序中:程序中:#SQL#SQL SQL ;n(2)(2)如何区分主变量与如何区分主变量与SQLSQL的列变量的列变量?v主变量前加冒号。如主变量前加冒号。如::CnameCnamen(3)(3)主变量与主变量与SQLSQL的列变量如何
7、交互、转换?的列变量如何交互、转换?v需要有一种机制:能将需要有一种机制:能将SQLSQL中的集合量逐个送入主变中的集合量逐个送入主变量内,供主程序使用。量内,供主程序使用。v方法方法:用一组游标语句。用一组游标语句。9.2 嵌入式嵌入式 SQL 3 3、SQLSQL语句与主语言间的通信语句与主语言间的通信 :1)1)主语言向主语言向SQLSQL语句提供参数;语句提供参数;2)2)向主语言传递向主语言传递SQLSQL的执行状态;的执行状态;3)3)将将SQLSQL操作结果交主语言进一步处理操作结果交主语言进一步处理n嵌入式嵌入式SQLSQL工作原理:工作原理:主语言程序主语言程序SQLSQL语
8、句语句游标游标主变量主变量SQLSQL状态状态执行参数执行参数执行状态执行状态结果状态结果状态9.2 嵌入式嵌入式 SQL三、嵌入式三、嵌入式SQLSQL的程序组成的程序组成 嵌入式嵌入式 SQLSQL语句可分为:语句可分为:可执行语句可执行语句(数据定义、控制、操纵)(数据定义、控制、操纵)说明性语句说明性语句 (说明变量、游标(说明变量、游标)n程序的主要部分程序的主要部分 (1)DECLARE(1)DECLARE段段(用于定义主变量用于定义主变量 )格式:格式:EXEC SQL BEGIN DECLARE SECTIONEXEC SQL BEGIN DECLARE SECTION;/主变
9、量说明主变量说明 EXEC SQL END DECLARE SECTIONEXEC SQL END DECLARE SECTION;(2)CONNECT(2)CONNECT 语句(语句(建立建立SQLSQL连接连接)格式:格式:EXEC SQL CONNECT TO SQLEXEC SQL CONNECT TO USER USER ;9.2 嵌入式嵌入式 SQL(3)WHENEVER(3)WHENEVER语句语句 使用使用WHENEVERWHENEVER语句可以简化每条嵌入式语句可以简化每条嵌入式SQLSQL语句语句后编写检查后编写检查SQLSTATESQLSTATE值的程序。值的程序。WHE
10、NEVERWHENEVER语句通知预编译程序如何处理三种异常:语句通知预编译程序如何处理三种异常:n WHENEVER SQLERRORWHENEVER SQLERROR:通知预编译程序产生处理通知预编译程序产生处理错误的代码错误的代码(SQLSTATE0).(SQLSTATE0).n WHENEVER SQLWARNINGWHENEVER SQLWARNING:通知预编译程序产生处通知预编译程序产生处理警报的代码理警报的代码(SQLSTATE=1).(SQLSTATE=1).n WHENEVER NOT FOUNDWHENEVER NOT FOUND:通知预编译程序产生没有通知预编译程序产生
11、没有查到内容的代码查到内容的代码(SQLSTATE=100).(SQLSTATE=100).9.2 嵌入式嵌入式 SQL用户可指定预编译程序采取以下行为:用户可指定预编译程序采取以下行为:nWHENEVERWHENEVERGOTOGOTO:通知预编译程序产生一条转移通知预编译程序产生一条转移语句。语句。nWHENEVERWHENEVERCONTINUECONTINUE:通知预编译程序让程序控通知预编译程序让程序控制流转入到下一个主语言语句。制流转入到下一个主语言语句。nWHENEVERWHENEVERCALLCALL:通知预编译程序调用函数。通知预编译程序调用函数。其完整语法如下:其完整语法如
12、下:WHENEVER SQLWARNING|SQLERROR|NOT FOUNDWHENEVER SQLWARNING|SQLERROR|NOT FOUND CONTINUE|GOTO stmt_label|CALL CONTINUE|GOTO stmt_label|CALL function()function()(4)(4)应用程序体应用程序体 若干可执行若干可执行SQLSQL语句及主语言语句。语句及主语言语句。提交和退出数据库:提交和退出数据库:COMMIT WORK RELEASECOMMIT WORK RELEASE;9.2 嵌入式嵌入式 SQL四、嵌入式四、嵌入式SQLSQL的使用
13、技术的使用技术1.1.无游标的操作无游标的操作 n说明性语句说明性语句 n数据定义数据定义语句语句n数据控制语句数据控制语句 n数据插入语句数据插入语句n非当前形式的非当前形式的UPDATEUPDATE、DELETEDELETE语句语句n语句查询结果为单记录的语句查询结果为单记录的SELECTSELECT2.2.带游标的查询操作带游标的查询操作 n查询结果为多记录。查询结果为多记录。n当前形式的当前形式的UPDATEUPDATE、DELETEDELETE语句语句9.2 嵌入式嵌入式 SQLn游标语句作用:游标语句作用:把对集合的操作转换为对单个记录的处理。把对集合的操作转换为对单个记录的处理。
14、n使用游标的步骤为:使用游标的步骤为:(1)(1)定义游标定义游标 分配缓冲区并对应查询语句。分配缓冲区并对应查询语句。格式:格式:EXEC SQL DECLARE EXEC SQL DECLARE CURSOR FOR CURSOR FOR SELECT ;9.2 嵌入式嵌入式 SQL(2)(2)打开游标打开游标 执行相应的语句,把查询结果取执行相应的语句,把查询结果取到缓冲区中。到缓冲区中。格式:格式:EXEC SQL OPEN EXEC SQL OPEN ;(3)(3)推进游标推进游标 推进游标指针并取当前记录。推进游标指针并取当前记录。格式:格式:EXEC SQL FETCH EXEC
15、 SQL FETCH INTO:INTO:1,:2,(4)(4)关闭游标关闭游标 释放缓冲区及其他资源。释放缓冲区及其他资源。格式:格式:EXEC SQL CLOSE EXEC SQL CLOSE ;查询查询语句语句游标名游标名SELECTSELECT结果结果1 12 2n n主变量主变量9.2 嵌入式嵌入式 SQL 例例9.69.6使用游标的示例。使用游标的示例。#include stdio.h#include EXEC SQL BEGIN DECLARE SECTIONEXEC SQL BEGIN DECLARE SECTION VARCHAR uid20;VARCHAR uid20;IN
16、T st_no INT st_no;CHAR c_no4;CHAR c_no4;FLOAT sc_grade FLOAT sc_grade;EXEC SQL END DECLARE SECTION;EXEC SQL END DECLARE SECTION;/*SQL SQL中使用的主变量说明中使用的主变量说明 */void main()void main()strcpy(uid,”YINstrcpy(uid,”YIN”);”);EXEC SQL WHENEVER SQLEXCEPTION GOTO error_abort EXEC SQL WHENEVER SQLEXCEPTION GOTO
17、error_abort;EXEC SQL CONNECT TO student_db USER:uid EXEC SQL CONNECT TO student_db USER:uid;/*建立与建立与DBDB的连接的连接 */printf(“connected to student_db by User%sn”,uid printf(“connected to student_db by User%sn”,uid););EXEC SQL DECLARE cu1 CURSOR FOR EXEC SQL DECLARE cu1 CURSOR FOR /*定义游标定义游标 */SELECT sno,
18、cno,grade SELECT sno,cno,grade FROM sc FROM sc WHERE sno WHERE sno=:st_no:st_no;scanf(“please enter the student no:%d”,st_no scanf(“please enter the student no:%d”,st_no););EXEC SQL OPEN cu1;EXEC SQL OPEN cu1;/*打开游标打开游标 */9.2 嵌入式嵌入式 SQL EXEC SQL WHENEVER NOT FOUND DO BREAK;EXEC SQL WHENEVER NOT FOUN
19、D DO BREAK;printf(“sno course_noprintf(“sno course_no graden”);graden”);for(;)for(;)EXEC SQL FETCH cu1 INTO:st_no,:c_no,:sc_grade EXEC SQL FETCH cu1 INTO:st_no,:c_no,:sc_grade;/*推进游标推进游标 */printf(“%-10d,%-4s,%-8.2fn”,st_no,c_no,sc_grade);printf(“%-10d,%-4s,%-8.2fn”,st_no,c_no,sc_grade);EXEC SQL CLOS
20、E cu1;EXEC SQL CLOSE cu1;/*关闭游标关闭游标 */EXEC SQL WHENEVER SQLEXCEPTION CONTINUE;EXEC SQL WHENEVER SQLEXCEPTION CONTINUE;EXEC SQL COMMIT WORK RELEASE;EXEC SQL COMMIT WORK RELEASE;/*提交并退出提交并退出DB DB*/EXEC SQL DISCONNECT CURRENT;EXEC SQL DISCONNECT CURRENT;/*撤消当前连接撤消当前连接 */exit(0);exit(0);五、五、动态动态 SQLSQLn
21、动态动态SQLSQL:程序运行时动态指定程序运行时动态指定SQLSQL语句。语句。n有有3 3种基本形式:种基本形式:(1)(1)条件可变条件可变 (2)(2)数据库对象、查询条件均可变数据库对象、查询条件均可变 (3)(3)语句可变语句可变n实现方式:实现方式:1 1直接执行的动态直接执行的动态SQLSQLn方法方法:定义一个串主变量,程序在执行时提示输入定义一个串主变量,程序在执行时提示输入SQLSQL语句。语句。2 2带动态参数的动态带动态参数的动态SQLSQLn方法方法:在在SQLSQL语句中含有临时占位变量,在此语句执行前,程序语句中含有临时占位变量,在此语句执行前,程序提示输入相应
22、参数以取代这些变量。提示输入相应参数以取代这些变量。3.3.查询类查询类的动态的动态SQLSQL(用于查询结果为集合且需返回的情况)(用于查询结果为集合且需返回的情况)n方法方法:定义一个串主变量,程序在执行时动态设置或提示输入定义一个串主变量,程序在执行时动态设置或提示输入SQLSQL语句。一般需用游标。语句。一般需用游标。五、五、动态动态 SQLSQLn动态动态SQLSQL执行过程:执行过程:(1 1)执行)执行PREPAREPREPARE语句要求语句要求DBMSDBMS分析、确认和优化语句,并为其生分析、确认和优化语句,并为其生成执行计划。成执行计划。语句格式:语句格式:PREPARE
23、PREPARE FROM:FROM:功能:功能:接收含有接收含有SQLSQL语句的主变量,并把该语句送到语句的主变量,并把该语句送到DBMSDBMS。DBMSDBMS编编译该语句并生成执行计划。译该语句并生成执行计划。(2 2)用)用EXECUTEEXECUTE语句执行语句执行”执行计划执行计划”。P.269 P.269 例例 9.79.7注意以下几句:注意以下几句:strcpy(select_st,”SELECT sno,sname,agestrcpy(select_st,”SELECT sno,sname,age FROM student WHERE”);FROM student WHER
24、E”);scanf(“please enter the query condition:%sn”,query_fscanf(“please enter the query condition:%sn”,query_f););strcat(select_st,query_fstrcat(select_st,query_f);/);/*将将SQLSQL查询语句保存在变量查询语句保存在变量select_stselect_st中中 */EXEC SQL EXEC SQL PREPAREPREPARE sql_stsql_st FROM FROM:select_st:select_st /*生成执行计划
25、生成执行计划 */EXEC SQL DECLARE st_cursorEXEC SQL DECLARE st_cursor CURSOR FOR CURSOR FOR sql_stsql_st 五、五、动态动态 SQLSQL补充例:补充例:在在scsc表中插入一条记录,记录的值由程序决定。表中插入一条记录,记录的值由程序决定。#include string.h#include#include stdio.h#include main()main()EXEC SQL BEGIN DECLARE SECTION;EXEC SQL BEGIN DECLARE SECTION;char perp ch
展开阅读全文