数据库系统概论(第五版)PPT第8章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

AnIntroductiontoDatabaseSystem数据库系统概论AnIntroductiontoDatabaseSystem第八章数据库编程xx大学信息学院AnIntroductiontoDatabaseSystem第八章数据库编程8.1嵌入式SQL8.2过程化SQL8.3存储过程和函数8.4ODBC编程*8.5OLEDB*8.6JDBC编程8.7小结AnIntroductiontoDatabaseSystem8.1嵌入式SQLSQL语言提供了两种不同的使用方式交互式嵌入式为什么要引入嵌入式SQLSQL语言是非过程性语言事务处理应用需要高级语言这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充AnIntroductiontoDatabaseSystem8.1嵌入式SQL8.1.1嵌入式SQL的处理过程8.1.2嵌入式SQL语句与主语言之间的通信8.1.3不用游标的SQL语句8.1.4使用游标的SQL语句8.1.5动态SQLAnIntroductiontoDatabaseSystem8.1.1嵌入式SQL的处理过程主语言嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,如C、C++、Java,称为宿主语言,简称主语言。处理过程预编译方法AnIntroductiontoDatabaseSystem嵌入式SQL的处理过程(续)关系数据库管理系统预处理程序转换嵌入式SQL语句为函数调用含嵌入式SQL语句的主语言程序转换后的主语言程序主语言编译程序编译处理目标语言程序AnIntroductiontoDatabaseSystem嵌入式SQL的处理过程(续)为了区分SQL语句与主语言语句,所有SQL语句必须加前缀EXECSQL,主语言为C语言时,语句格式:EXECSQLSQL语句;AnIntroductiontoDatabaseSystem8.1嵌入式SQL8.1.1嵌入式SQL的处理过程8.1.2嵌入式SQL语句与主语言之间的通信8.1.3不用游标的SQL语句8.1.4使用游标的SQL语句8.1.5动态SQLAnIntroductiontoDatabaseSystem8.1.2嵌入式SQL语句与主语言之间的通信将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句SQL语句描述性的面向集合的语句负责操纵数据库高级语言语句过程性的面向记录的语句负责控制逻辑流程它们之间应该如何通信?AnIntroductiontoDatabaseSystem嵌入式SQL语句与主语言之间的通信(续)数据库工作单元与源程序工作单元之间的通信(1)向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区实现(2)主语言向SQL语句提供参数,主要用主变量实现(3)将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现AnIntroductiontoDatabaseSystem1.SQL通信区SQLCA:SQLCommunicationAreaSQLCA是一个数据结构SQLCA的用途SQL语句执行后,系统反馈给应用程序信息描述系统当前工作状态描述运行环境这些信息将送到SQL通信区中应用程序从SQL通信区中取出这些状态信息,据此决定接下来执行的语句AnIntroductiontoDatabaseSystemSQL通信区(续)SQLCA使用方法定义SQLCA用EXECSQLINCLUDESQLCA定义使用SQLCASQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,否则表示出错应用程序每执行完一条SQL语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理AnIntroductiontoDatabaseSystem2.主变量主变量嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据在SQL语句中使用的主语言程序变量简称为主变量(HostVariable)AnIntroductiontoDatabaseSystem主变量(续)主变量的类型输入主变量由应用程序对其赋值,SQL语句引用输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序AnIntroductiontoDatabaseSystem主变量(续)指示变量是一个整型变量,用来“指示”所指主变量的值或条件一个主变量可以附带一个指示变量(IndicatorVariable)指示变量的用途指示输入主变量是否为空值检测输出变量是否为空值,值是否被截断AnIntroductiontoDatabaseSystem主变量(续)在SQL语句中使用主变量和指示变量的方法说明主变量和指示变量BEGINDECLARESECTION......(说明主变量和指示变量)...ENDDECLARESECTIONAnIntroductiontoDatabaseSystem主变量(续)在SQL语句中使用主变量和指示变量的方法(续)使用主变量说明之后的主变量可以在SQL语句中任何一个能够使用表达式的地方出现为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(:)作为标志使用指示变量指示变量前也必须加冒号标志必须紧跟在所指主变量之后AnIntroductiontoDatabaseSystem主变量(续)在SQL语句之外(主语言语句中)使用主变量和指示变量的方法可以直接引用,不必加冒号AnIntroductiontoDatabaseSystem3.游标为什么要使用游标SQL语言与主语言具有不同数据处理方式SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录主语言是面向记录的,一组主变量一次只能存放一条记录仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式AnIntroductiontoDatabaseSystem游标(续)游标游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果每个游标区都有一个名字用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理AnIntroductiontoDatabaseSystem4.建立和关闭数据库连接(1)建立数据库连接EXECSQLCONNECTTOtarget[ASconnection-name][USERuser-name];target是要连接的数据库服务器常见的服务器标识串,如dbname@hostname:port包含服务器标识的SQL串常量DEFAULTAnIntroductiontoDatabaseSystem建立和关闭数据库连接(续)connect-name是可选的连接名,连接名必须是一个有效的标识符在整个程序内只有一个连接时可以不指定连接名程序运行过程中可以修改当前连接EXECSQLSETCONNECTIONconnection-name|DEFAULT;AnIntroductiontoDatabaseSystem建立和关闭数据库连接(续)(2)关闭数据库连接EXECSQLDISCONNECT[connection];AnIntroductiontoDatabaseSystem5.程序实例[例8.1]依次检查某个系的学生记录,交互式更新某些学生年龄。EXECSQLBEGINDECLARESECTION;/*主变量说明开始*/charDeptname[20];charHsno[9];charHsname[20];charHssex[2];intHSage;intNEWAGE;EXECSQLENDDECLARESECTION;/*主变量说明结束*/longSQLCODE;EXECSQLINCLUDESQLCA;/*定义SQL通信区*/AnIntroductiontoDatabaseSystem程序实例(续)intmain(void)/*C语言主程序开始*/{intcount=0;charyn;/*变量yn代表yes或no*/printf(Pleasechoosethedepartmentname(CS/MA/IS):);scanf(%s,deptname);/*为主变量deptname赋值*/EXECSQLCONNECTTOTEST@localhost:54321USERSYSTEM/MANAGER;/*连接数据库TEST*/EXECSQLDECLARESXCURSORFOR/*定义游标SX*/SELECTSno,Sname,Ssex,Sage/*SX对应的语句*/FROMStudentWHERESDept=:deptname;EXECSQLOPENSX;/*打开游标SX,指向查询结果的第一行*/AnIntroductiontoDatabaseSystem程序实例(续)for(;;)/*用循环结构逐条处理结果集中的记录*/{EXECSQLFETCHSXINTO:HSno,:Hsname,:HSsex,:HSage;/*推进游标,将当前数据放入主变量*/if(SQLCA.SQLCODE!=0)/*SQLCODE!=0,表示操作不成功*/break;/*利用SQLCA中的状态信息决定何时退出循环*/if(count++==0)/*如果是第一行的话,先打出行头*/printf(\n%-10s%-20s%-10s%-10s\n,Sno“,Sname“,Ssex,Sage);printf(%-10s%-20s%-10s%-10d\n“,HSno,Hsname,Hssex,HSage);/*打印查询结果*/printf(“UPDATEAGE(y/n)?”);/*询问用户是否要更新该学生的年龄*/do{scanf(%c,&yn);}while(yn!='N'&&yn!='n'&&yn!='Y'&&yn!='y');AnIntroductiontoDatabaseSystem程序实例(续)if(yn=='y'||yn=='Y')/*如果选择更新操作*/{printf(INPUTNEWAGE:);scanf(%d,&NEWAGE);/*用户输入新年龄到主变量中*/EXECSQLUPDATEStudent/*嵌入式SQL更新语句*/SETSage=:NEWAGEWHERECURRENTOFSX;}/*对当前游标指向的学生年龄进行更新*/}EXECSQLCLOSESX;/*关闭游标SX,不再和查询结果对应*/EXECSQLCOMMITWORK;/*提交更新*/EXECSQLDISCONNECTTEST;/*断开数据库连接*/}AnIntroductiontoDatabaseSystem8.1嵌入式SQL8.1.1嵌入式SQL的处理过程8.1.2嵌入式SQL语句与主语言之间的通信8.1.3不用游标的SQL语句8.1.4使用游标的SQL语句8.1.5动态SQLAnIntroductiontoDatabaseSystem8.1.3不用游标的SQL语句不用游标的SQL语句的种类说明性语句数据定义语句数据控制语句查询结果为单记录的SELECT语句非CURRENT形式的增删改语句AnIntroductiontoDatabaseSystem不用游标的SQL语句(续)1.查询结果为单记录的SELECT语句2.非CURRENT形式的增删改语句AnIntroductiontoDatabaseSystem1.查询结果为单记录的SELECT语句这类语句不需要使用游标,只需用INTO子句指定存放查询结果的主变量。[例8.2]根据学生号码查询学生信息。EXECSQLSELECTSno,Sname,Ssex,Sage,SdeptINTO:Hsno,:Hname,:Hsex,:Hag

1 / 139
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功