数据库中的数据交换.ppt

上传人:牧羊曲112 文档编号:5985462 上传时间:2023-09-11 格式:PPT 页数:64 大小:249.50KB
返回 下载 相关 举报
数据库中的数据交换.ppt_第1页
第1页 / 共64页
数据库中的数据交换.ppt_第2页
第2页 / 共64页
数据库中的数据交换.ppt_第3页
第3页 / 共64页
数据库中的数据交换.ppt_第4页
第4页 / 共64页
数据库中的数据交换.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《数据库中的数据交换.ppt》由会员分享,可在线阅读,更多相关《数据库中的数据交换.ppt(64页珍藏版)》请在三一办公上搜索。

1、第六章数据库中的数据交换,2,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,数据库中的数据交换,6.1 概述6.2 数据交换的管理6.3 数据交换的流程6.4 数据交换的四种方式,3,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.1 概述,何为数据库中的数据交换?,数据库使用者,数据库,是数据库与其使用者间的数据交互过程,6.1.1 数据交换模型,数据主体,数据客体,4,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.1.2 数据交换的五种方式,初级阶段人机对话方式,交互方式中级阶段嵌入式方式自含方式调用层接口(call lev

2、el interface)方式近期阶段Web方式,5,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,数据库中的数据交换,6.1 概述6.2 数据交换的管理6.3 数据交换的流程6.4 数据交换的四种方式,6,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2 数据交换的管理,数据交换的管理包括如下内容:6.2.1 会话管理6.2.2 连接管理6.2.3 游标管理6.2.4 诊断管理6.2.5 动态SQL,7,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.1 会话管理,数据交换是两个数据体之间的会话过程,会话的进行须预先作环境

3、的设定,这就是会话管理会话管理的内容包括:会话的数据客体模式设定(网络环境、目录层、模式层)会话的语言模式设定(字符集)会话的时间模式设定(包括时区)会话的标识符设定(对所建立的会话进行命名),8,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.2 连接管理,连接管理负责在数据主、客体间建立实质性的关联,包括服务器指定、内存区域分配等。也可以断开两者之间的关联连接语句CONNECT TO ASUSER断开连接语句DISCONNECT|ALL|CURRENT,9,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理,在数据交换中,数据库

4、SQL中的变量是集合型的而应用程序的程序设计语言中的变量则是标量型,因此数据库中SQL变量不能直接供程序设计语言使用,而需要有一种机制将SQL变量中的集合量逐个取出后送入应用程序变量内供其使用,而提供此种机制方法是增加游标(cursor)语句,10,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理,游标(Cursor)操作declare a cursor为某一映像语句(可能返回多个结果元组)的结果集合定义一个命名的游标open the cursor执行相应的映像语句并打开获得的结果集,此时游标处于活动状态并指向结果集合的第一条记录的前面fetch a ro

5、w by the cursor将游标推向结果集合中的下一条记录,读出游标所指向记录的值并赋给对应的主语言变量One-Row-at-a-Time Principleclose the cursor关闭所使用的游标,释放相关的系统资源,11,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理,The Declare Cursor Statement,EXEC SQL DECLARE cursor-name CURSOR FORsubquery ORDER BY.FOR READ ONLY|UPDATE OF columnname,.;,如果查询语句的执行结果是一

6、个元组的集合,那么需要使用游标来获取结果集合中的每一个元组仅当用户确信只可能返回单个结果元组的情况下才可以使用SELECTINTO形式的嵌入式SQL查询语句,12,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理 定义游标,declare a cursor,EXEC SQL DECLARE agent_dollars CURSOR FORselect aid,sum(dollars)from orderswhere cid=:cust_idgroup by aid;,means multiple rows in result set,search by c

7、ustomers id(stored in host variable cust_id)when open the cursor agent_dollars,define the cursor name,13,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理 打开游标,open the cursor,.EXEC SQL OPEN agent_dollars;.,execute the select statement,after open the cursor,the pointer of the cursor has been placed in the

8、 position before the first row in result set.,before open the cursor,you must place cno value of customers id in the host variable cust_id using in the declare statement of cursor agent_dollars.,14,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理 取游标,fetch the result rows,while(TRUE)/*loop to fetch rows*

9、/exec sql fetch agent_dollars into:agent_id,:dollar_sum;printf(%s%11.2fn,agent_id,dollar_sum);/*end fetch loop*/,move the pointer of cursor to the next row,then the next row is current rowfetch the current rows value into host variables:agents id to agent_id,summation of dollars to dollar_sum,15,200

10、7年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理 取游标,end fetch loop,exec sql whenever not found goto finish;.while(TRUE)exec sql fetch.into.;.finish:exec sql close agent_dollars;,declare not found event processing,execute this statement after fetch loop when not found event is occur,16,2007年度-教育部-IBM精品课程-南京

11、大学计算机科学与技术系,6.2.3 游标管理 关闭游标,close the cursor,.EXEC SQL CLOSE agent_dollars;.,close the cursor,and release the result set and other resource in DBMSafter close the cursor,it can be opened again,17,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.3 游标管理-可滚动游标,Scrollable Cursors,EXEC SQL DECLARE cursor_name INSENS

12、ITIVE SCROLL CURSOR WITH HOLD FORsubquery UNION subquery ORDER BY.FOR READ ONLY|FOR UPDATE OF columnname.;,EXEC SQL FETCH NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE value_spec FROM cursor_name INTO.;,18,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.4 诊断管理,在进行数据交换时,数据主体发出数据交换请求后,数据客体返回两种信息:所请求的数据值执行的状态值,而这种状态值又被

13、称为诊断值,而生成、获取诊断值的管理称诊断管理1.诊断区域2.诊断操作,19,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,1.什么是动态SQL?在嵌入式SQL编程中,很多时候编程人员无法确定到底应该做什么工作,所使用的SQL语句也不能预先确定,需要根据程序的实际运行情况来决定,也就是根据实际情况来生成并调用SQL语句。这样的SQL语句被称为动态SQL,20,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,动态SQL语句的可变性SQL语句正文动态可变变量个数动态可变类型动态可变SQL语句引用对象动态可变相对地

14、,事先能够确定下来的嵌入式SQL语句又称为静态SQL静态SQL与动态SQL的优缺点比较(next),21,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,静态SQL在通过预编译时,SQL命令就被分析并为它们的执行作好了相应的准备工作。在程序运行时,只需要调用预先优化好的访问路径优点:性能好缺点:只能根据缺省参数值进行优化,其访问路径并非是最优访问路径动态SQL程序在运行时动态生成的SQL命令优点:可以根据运行时的数据库最新情况选择最优访问路径缺点:动态地进行SQL语句的语法分析和访问路径选择,22,2007年度-教育部-IBM精品课程-南京大学计算机科

15、学与技术系,6.2.5 动态SQL,2.在什么情况下需要使用动态SQL?应用程序需要在执行过程中生成SQL语句;SQL语句用到的对象在预编译时不存在;希望SQL语句的执行能够根据执行时的数据库系统内部的统计信息来采用最优的访问策略,23,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,3.嵌入式动态SQL的语句有关描述符区的操作语句有关动态SQL的使用语句,描述符区(descriptor area)应用程序与数据库需进行信息交互的区域,24,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,3.有关动态SQL使用

16、语句Prepare语句:为执行对数据库的访问操作而准备一个存储在主变量中的SQL语句Prepare into FROM;【例】prepare s1 from:mystatement;【例】prepare s2 into:mysqlda from:myquery;,25,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,Describe语句:获得一个已准备好的SQL语句的结果集的描述信息Describe into;【例】describe s1 into:mysqlda;,26,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动

17、态SQL,Execute语句:执行一个已准备过的SQL语句(非select语句)Execute using【例】Execute s1【例】Execute s1 using:x,:y必需使用游标来处理动态SQL查询命令Execute immediate:立即执行一条SQL命令等价于 prepare+execute,27,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,4.动态SQL的分类直接执行:不带参数的非查询类动态SQL的执行。例:EXEC SQL BEGIN DECLARE SECTION;Char stmt1024;EXEC SQL END DE

18、CLARE SECTION;do Printf(“请输入非查询类SQL语句:”);Scanf(“%s”,28,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,带动态参数:在非查询类SQL语句中使用到一些未确定的变量(带参数),【例】根据学生的姓名来删除学生Strcpy(stmt,“delete from S where Sn=?”);/*?代表命令参数*/EXEC SQL PREPARE s1 FROM:stmt;/*输入一个学生的姓名到主变量myname中*/EXEC SQL EXECUTE s1 USING:myname;/*用主变量 myname

19、 的值代替原来的?*/,29,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.2.5 动态SQL,动态查询:需要查询结果的动态查询类SQL语句,且查询的结果属性不确定,一般情况下需要结合游标来使用用prepare语句准备一条动态查询类SQL语句利用准备好的语句定义游标EXEC SQL DECLARE CURSOR FOR;打开游标EXEC SQL OPEN USING;推进游标EXEC SQL FETCH INTO|USING DESCRIPTOR;关闭游标,30,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,数据库中的数据交换,6.1 概述6.2 数

20、据交换的管理6.3 数据交换的流程6.4 数据交换的四种方式,31,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.3 数据交换的流程,32,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,数据库中的数据交换,6.1 概述6.2 数据交换的管理6.3 数据交换的流程6.4 数据交换的四种方式,33,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4 数据交换的四种方式,6.4.1 嵌入式SQL6.4.2 自含式SQL6.4.3 调用层接口6.4.4 Web方式,34,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,

21、6.4.1 嵌入式SQL,SQL语言的使用方式交互式SQL可独立运行,一般供临时用户操作访问数据库用嵌入式SQLSQL+主语言 的应用开发模式自含式SQL兼有SQL数据访问和高级程序设计语言的流程控制、简单数值处理功能可在数据库服务器中独立运行常用于编写存储过程,存储函数,触发器,35,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1 嵌入式SQL,在嵌入式SQL中需要解决下面的四个问题:主语言语句与SQL语句的区别主语言程序与嵌入式SQL间的通讯主语言变量与SQL变量的区别主语言语句与SQL语句的数据交换,36,2007年度-教育部-IBM精品课程-南京大学计算机

22、科学与技术系,6.4.1 嵌入式SQL,主语言语句与SQL语句的区别?对嵌入在主语言中的SQL语句加前缀(EXEC SQL)和后缀(END_EXEC或;),主语言程序与ESQL间的通讯EXEC SQL INCLUDE SQLCA;SQLCA是一个系统定义的全局变量,用于返回嵌入式SQL命令的执行状态及其结果信息。如:命令的执行是否成功?执行结果是否为空?等等,37,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1 嵌入式SQL,主语言变量与SQL变量的区别?主变量在嵌入式SQL语句中使用的主语言变量SQL变量SQL语句中的表名或属性名也可以看成是一个变量,我们称其为

23、SQL变量主变量是标量变量,而SQL变量则是集合变量可以在嵌入式SQL语句中使用主语言变量,但必需在主语言变量前面加上一个前缀:,以便与SQL语句中的表名或属性名区别开来,38,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1 嵌入式SQL,可以通过主语言变量在嵌入式SQL语句与主语言语句之间交换数据。但一个主语言变量一次只能存储一个值可以通过主语言变量获取查询结果值,并用于主语言语句中也可以将保存在主语言变量中的值用于SQL语句的执行,39,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1 嵌入式SQL,在嵌入式SQL语句中使用的主语言

24、变量必需预先在DECLARE语句段中定义EXEC SQL BEGIN DECLARE SECTION;/*定义在嵌入式SQL语句中使用的主语言变量*/EXEC SQL END DECLARE SECTION;,40,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1 嵌入式SQL,主语言语句与SQL语句的数据交换?SQL语句的处理对象与处理结果都是集合量,而主语言的语句只能处理标量值。因此在这两者之间需要有特殊的数据交换手段游标(cursor)通过游标机制可以将SQL变量中的集合量逐个取出送入主变量内,再供主程序使用。从而完成主语言程序与SQL语句之间的数据交换,41

25、,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,嵌入式SQL语句的例子(1),与交互式SQL的区别带有前缀EXEC SQL和后缀;使用into子句来获取结果元组值该查询的结果集中只含有单个结果元组用主语言变量:host_var保存结果元组中的属性值通过前缀:来区分主语言变量和SQL中的表名或属性名,EXEC SQL select count(*)into:host_varfrom customers;,42,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,嵌入式SQL语句的例子(2),为了使用这些主语言变量,必须首先在DECLARE SECTION部分声明

26、这些变量,Why?,EXEC SQL select cname,discnt into:cust_name,:cust_discnt from customers where cid=:cust_id;,主语言变量声明语句(DECLARE SECTION)作用在编译时就可以检查主语言变量及其所对应的属性的数据类型是否一致为接收从数据库返回的结果值而预先申请内存空间,43,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1.2 嵌入式SQL程序的编制,The Declare Section定义主语言变量Condition Handling在嵌入式SQL语句执行出错或发生

27、异常的情况下,对应用程序的执行流程进行控制SQL Connect to Database连接数据库Main Body of Application Program用主语言编写的应用程序,包括界面和数据处理过程用ESQL编写的数据库访问语句SQL Disconnect撤消与数据库的连接,程序结构,44,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,The Declare Section,exec sql begin declare section;char cust_id5;char cust_name14;float cust_discnt;char user_name20

28、,user_pwd20;exec sql end declare section;,Begin declare SQL host variables,End of declare section,host variables for cno,four characters and a null terminator,host variables for user name and password,45,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,Condition Handling,exec sql whenever sqlerror goto report_error

29、;exec sql whenever not found goto notfound;,error trap condition,not found condition,46,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,SQL Connect Statement,SQL99target-server数据库名connect-name本次连接(connect session)的名称在一个程序中可以同时维持多个连接username本次连接所使用的数据库用户的用户名,EXEC SQL CONNECT TO target-serverAS connect-name USER use

30、rname;,EXEC SQL CONNECT TO DEFAULT;,47,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,SQL Connect Statement,Oracleuser_nameOracle数据库用户的用户名user_pwd数据库用户的口令在Oracle的数据库连接命令中,不需要给出需要连接的数据库名,EXEC SQL CONNECT TO:user_name IDENTIFIED BY:user_pwd;,48,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,交互式访问数据库的程序段,while(prompt(cid_prompt,1

31、,cust_id,4)=0)exec sql select cname,discntinto:cust_name,:cust_discntfrom customerswhere cid=:cust_id;exec sql commit work;printf(CUSTOMERS NAME IS%s AND DISCNT IS%5.1fn,cust_name,cust_discnt);continue;notfound:printf(Cant find customer%s,continuingn,cust_id);,49,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,SQL

32、 Disconnect Statement,SQL99or,EXEC SQL DISCONNECT connect-name;,EXEC SQL DISCONNECT CURRENT;,50,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,SQL Disconnect Statement,Oracle,exec sql commit release;,exec sql rollback release;,a commit statement followed by a disconnect statement,for successful completion,a rollb

33、ack statement followed by a disconnect statement,to undo any partial work in an unsuccessful task,51,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.1.3 嵌入式SQL的编译,嵌入式SQL应用程序的编译流程预编译(Precompiler)使用DBMS所提供的预编译程序,将应用程序中的嵌入式SQL语句转换成相应的主语言调用函数编译(Compiler)使用主语言的编译程序编译转换后的源程序链接生成可执行程序执行,52,2007年度-教育部-IBM精品课程-南京大学计算机科

34、学与技术系,6.4.2 自含式SQL,服务器内的数据交换,6.4.2.1 自含式SQL的内容传统的SQL传统程序设计语言的主要成份,包括流程控制及循环语句、输出语句、调用语句以及服务性的函数库、类库等 SQL中的数据交换,包括游标、诊断及动态SQL,53,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.2.2 自含式SQL的编程,自含式SQL编程的结构单位是块,一个块一般包括三部分内容DECLARE/*声明部分*/BEGINEXCEPTION/*例外部分*/END,54,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.2.2 自含式SQL的编

35、程,自含式SQL相对于嵌入式SQL的优势不需要区分主变量与SQL变量编译过程极为简单,55,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.3 调用层接口,C/S方式下的数据库访问接口ISO接口:SQL/CLI微软接口:ODBCSUN接口:JDBC数据交换的流程连接阶段数据交换阶段断开连接阶段,56,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.3 调用层接口,连接阶段负责资源分配和建立连接相关函数AlloEnv分配SQL环境AlloStmt分配SQL语句AlloHandle分配SQL资源AlloConnect分配SQL连接Connect创

36、建连接,57,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.3 调用层接口,数据交换阶段主要的函数有关游标的函数有关诊断的函数有关动态SQL的函数有关数据获取的函数其它,58,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.3 调用层接口,断开连接阶段断开连接并释放资源,59,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,使用ODBC的程序结构1 连接阶段,60,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,使用ODBC的程序结构2 数据交换阶段,61,2007年度-教育部-IBM精品课程-南京大学计

37、算机科学与技术系,使用ODBC的程序结构3 断开连接阶段,62,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,6.4.4 Web方式,ASPJSPXML,数据库连接池,数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标数据库连接池正是针对这个问题提出来的,63,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,数据库连接池,数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏这项技术能明显提高对数据库操作的性能,64,2007年度-教育部-IBM精品课程-南京大学计算机科学与技术系,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号