第08章 数据库编程(1).ppt
《第08章 数据库编程(1).ppt》由会员分享,可在线阅读,更多相关《第08章 数据库编程(1).ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 )1数据库系统概论数据库系统概论An Introduction to Database System第八章第八章 数据库编程数据库编程(1)(1)2第八章第八章 数据库编程数据库编程8.1 嵌入式嵌入式SQL8.2 存储过程存储过程8.3 ODBC编程编程 )3学习目标学习目标了解嵌入式了解嵌入式SQL的一般形式的一般形式理解嵌入式理解嵌入式SQL语句与主语言之间的通信语句与主语言之间的通信掌握掌握不用游标不用游标不用游标不用游标的的SQL语句语句掌握掌握使用游标使用游标使用游标使用游标的的SQL语句语句了解动态了解动态SQL )48.1 8.1 嵌入式嵌入式SQLSQLn nSQLSQLS
2、QLSQL语言提供了两种不同的使用方式:语言提供了两种不同的使用方式:语言提供了两种不同的使用方式:语言提供了两种不同的使用方式:交互式交互式交互式交互式:作为独立语言在终端交互方式下使用作为独立语言在终端交互方式下使用嵌入式嵌入式嵌入式嵌入式:将将SQL语言嵌入到某种高级语言中语言嵌入到某种高级语言中n n为什么要引入嵌入式为什么要引入嵌入式为什么要引入嵌入式为什么要引入嵌入式SQLSQLSQLSQLSQLSQL语言语言:是是面向集合面向集合面向集合面向集合的描述性语言,是非过程的的描述性语言,是非过程的事务处理需要高级语言的事务处理需要高级语言的过程性结构过程性结构过程性结构过程性结构来实
3、现。来实现。n n这两种方式细节上的差别:这两种方式细节上的差别:这两种方式细节上的差别:这两种方式细节上的差别:在程序设计环境下,在程序设计环境下,SQLSQL语句要做某些语句要做某些必要的扩充必要的扩充 )58.1 8.1 嵌入式嵌入式SQL SQL 8.1.1 8.1.1 8.1.1 8.1.1 嵌入式嵌入式嵌入式嵌入式SQLSQLSQLSQL的处理过程的处理过程的处理过程的处理过程8.1.2 8.1.2 8.1.2 8.1.2 嵌入式嵌入式嵌入式嵌入式SQLSQLSQLSQL与主语言之间通信与主语言之间通信与主语言之间通信与主语言之间通信8.1.3 8.1.3 8.1.3 8.1.3
4、不用游标的不用游标的不用游标的不用游标的SQLSQLSQLSQL语句语句语句语句8.1.4 8.1.4 8.1.4 8.1.4 使用游标的使用游标的使用游标的使用游标的SQLSQLSQLSQL语句语句语句语句8.1.5 8.1.5 8.1.5 8.1.5 动态动态动态动态SQLSQLSQLSQL简介简介简介简介 )68.1.1 8.1.1 嵌入式嵌入式SQLSQL的处理过程的处理过程1.1.主语言主语言 嵌入式嵌入式SQLSQL是将是将SQLSQL语句嵌入到程序设语句嵌入到程序设计语言中,被嵌入的程序设计语言称为宿计语言中,被嵌入的程序设计语言称为宿主语言,简称主语言。主语言,简称主语言。)7
5、8.1.1 8.1.1 嵌入式嵌入式SQLSQL的处理过程的处理过程(1)(1)由由RDBMSRDBMS的预处理程序对源程序进行扫描,的预处理程序对源程序进行扫描,识识识识别出别出别出别出SQLSQLSQLSQL语句语句;(2)(2)把它们把它们转换转换转换转换成成主语言调用语句主语言调用语句,以使主语言编,以使主语言编译程序能识别它译程序能识别它;(3)(3)最后由主语言的编译程序将整个源程序最后由主语言的编译程序将整个源程序编译编译编译编译成成目标码目标码.2.2.处理过程处理过程 目前采用较多的是目前采用较多的是目前采用较多的是目前采用较多的是预编译方法预编译方法预编译方法预编译方法,其
6、处理过程是:,其处理过程是:,其处理过程是:,其处理过程是:)88.1.1 8.1.1 嵌入式嵌入式SQLSQL的处理过程的处理过程3.3.区分嵌入式区分嵌入式SQLSQL语句与主语言语句语句与主语言语句:前缀前缀:EXEC SQL 结束标志结束标志:随主语言的不同而不同随主语言的不同而不同在在C C语言中嵌入语言中嵌入SQLSQL语句形式:语句形式:EXEC SQL;例:例:EXEC SQL DROP TABLE Student;)98.1.1 8.1.1 嵌入式嵌入式SQLSQL的处理过程的处理过程在在COBOLCOBOL语言中嵌入语言中嵌入SQLSQL语句:语句:EXEC SQL END
7、-EXEC 例:例:EXEC SQL DROP TABLE Student END-EXEC )108.1 8.1 嵌入式嵌入式SQL SQL 8.1.1 8.1.1 8.1.1 8.1.1 嵌入式嵌入式嵌入式嵌入式SQLSQLSQLSQL的处理过程的处理过程的处理过程的处理过程8.1.2 8.1.2 8.1.2 8.1.2 嵌入式嵌入式嵌入式嵌入式SQLSQLSQLSQL与主语言之间通信与主语言之间通信与主语言之间通信与主语言之间通信8.1.3 8.1.3 8.1.3 8.1.3 不用游标的不用游标的不用游标的不用游标的SQLSQLSQLSQL语句语句语句语句8.1.4 8.1.4 8.1.
8、4 8.1.4 使用游标的使用游标的使用游标的使用游标的SQLSQLSQLSQL语句语句语句语句8.1.5 8.1.5 8.1.5 8.1.5 动态动态动态动态SQLSQLSQLSQL简介简介简介简介 )118.1.2 8.1.2 嵌入式嵌入式SQLSQL语句与主语言之间的通信语句与主语言之间的通信 将将SQL嵌入到高级语言中混合编程,程序中会嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句含有两种不同计算模型的语句:SQLSQL语句语句 描述性的面向集合的语句描述性的面向集合的语句 负责负责操纵数据库操纵数据库高级语言语句高级语言语句 过程性的面向记录的语句过程性的面向记录的语句
9、 负责负责控制程序流程控制程序流程 )128.1.2 8.1.2 嵌入式嵌入式SQLSQL语句与主语言之间的通信语句与主语言之间的通信 工作单元之间的通信方式工作单元之间的通信方式工作单元之间的通信方式工作单元之间的通信方式(1)SQL(1)SQL通信区通信区通信区通信区 向主语言传递向主语言传递SQLSQL语句的执行状态信息语句的执行状态信息 主语言能够根据此信息控制程序流程主语言能够根据此信息控制程序流程(2)(2)主变量主变量主变量主变量 主语言向主语言向SQLSQL语句提供参数语句提供参数 将将SQLSQL语句查询数据库的结果交主语言进一步语句查询数据库的结果交主语言进一步处理处理(3
10、)(3)游标游标游标游标 解决集合性操作语言与过程性操作语言不匹配解决集合性操作语言与过程性操作语言不匹配 )131.SQL1.SQL通信区通信区(1)SQLCA(1)SQLCA(1)SQLCA(1)SQLCA 是是SQL Communication AreaSQL Communication Area的缩写的缩写 SQLCASQLCA是一个数据结构。是一个数据结构。nSQLCASQLCA的用途的用途SQLSQL语句执行后,语句执行后,RDBMSRDBMS反馈给应用程序信息反馈给应用程序信息 描述系统当前工作状态描述系统当前工作状态 描述运行环境描述运行环境这些信息将送到这些信息将送到SQLS
11、QL通信区通信区SQLCASQLCA中中应用程序从应用程序从SQLCASQLCA中取出这些状态信息,据此中取出这些状态信息,据此决定接下来执行的语句决定接下来执行的语句 )141.SQL1.SQL通信区通信区(2)SQLCA(2)SQLCA的使用方法的使用方法定义定义SQLCASQLCA 语句格式:语句格式:EXEC SQL INCLUDE SQLCA )151.SQL1.SQL通信区通信区使用使用SQLCASQLCASQLCASQLCA中有一个变量中有一个变量SQLCODE,存放每次执行,存放每次执行SQLSQL语句后的返回值;语句后的返回值;如果如果SQLCODESQLCODE返回返回0
12、0(即常量(即常量SUCCESSSUCCESS),则表示),则表示SQLSQL语句成功,否则表示出错。语句成功,否则表示出错。应用程序每执行完一条应用程序每执行完一条SQLSQL语句后,都应该测试语句后,都应该测试一下一下SQLCODESQLCODE的值,以了解该的值,以了解该SQLSQL语句执行情况并语句执行情况并做相应处理。做相应处理。)162.2.主变量主变量 (1)(1)什么是主变量什么是主变量嵌入式嵌入式SQLSQL语句中可以使用主语言的程语句中可以使用主语言的程序变量来输入或输出数据序变量来输入或输出数据在在SQLSQL语句中使用的语句中使用的主语言程序变量主语言程序变量简简称为主
13、变量(称为主变量(Host VariableHost Variable))172.2.主变量主变量 (2)(2)主变量的类型主变量的类型输入主变量输入主变量 由应用程序对其赋值,由应用程序对其赋值,SQLSQL语句引用语句引用输出主变量输出主变量 由由SQLSQL语句赋值或设置状态信息,返回语句赋值或设置状态信息,返回给应用程序给应用程序说明说明:一个主变量有可能既是输入主变量又:一个主变量有可能既是输入主变量又是输出主变量是输出主变量 )182.2.主变量主变量 (3)(3)主变量的用途主变量的用途输入主变量输入主变量 指定向数据库中指定向数据库中插入插入的数据的数据 将数据库中的数据将数据
14、库中的数据修改修改为指定值为指定值 指定指定WHEREWHERE子句或子句或HAVINGHAVING子句中的子句中的条件条件 指定指定执行执行的操作的操作 )192.2.主变量主变量 (3)(3)主变量的用途主变量的用途输出主变量输出主变量 获取获取SQLSQL语句的结果数据语句的结果数据 获取获取SQLSQL语句的执行状态语句的执行状态 )20(4)(4)指示变量指示变量一个主变量可以附带一个指示变量一个主变量可以附带一个指示变量(Indicator VariableIndicator Variable)什么是指示变量什么是指示变量整型变量整型变量用来用来“指示指示”所指主变量的值或条件所指
15、主变量的值或条件2.2.主变量主变量 )21(4)(4)指示变量指示变量指示变量的用途指示变量的用途 输入主变量可以利用它赋空值输入主变量可以利用它赋空值 输出主变量可以利用它检测出是否空输出主变量可以利用它检测出是否空值,值是否被截断值,值是否被截断2.2.主变量主变量 )222.2.主变量主变量 (5)(5)在在SQLSQL语句中使用主变量和指示变量的方法语句中使用主变量和指示变量的方法1)1)说明主变量和指示变量说明主变量和指示变量BEGIN DECLARE SECTION.(说明主变量和指示变量说明主变量和指示变量).END DECLARE SECTION )232.2.主变量主变量
16、(5)(5)在在SQLSQL语句中使用主变量和指示变量的方法语句中使用主变量和指示变量的方法2)2)使用主变量使用主变量主变量在主变量在SQLSQL语句中任何可使用表达式的语句中任何可使用表达式的地方出现;地方出现;为了与数据库对象名(表名、视图名、列为了与数据库对象名(表名、视图名、列名等)区别,名等)区别,SQLSQL语句中的语句中的主变量名前要主变量名前要加分隔符(加分隔符(:)作为标志作为标志 )242.2.主变量主变量 例例主变量的说明及使用主变量的说明及使用EXEC SQL EXEC SQL BEGINBEGIN DECLARE SECTIONDECLARE SECTION;CHA
17、R title_id(7);CHAR title_id(7);CHAR title(81);CHAR title(81);INT royalty;INT royalty;EXEC SQLEXEC SQL END END DECLARE SECTIONDECLARE SECTION;if(sqlca.sqlcodeSUCCESS)break;printf(Sno:%s,Cno:%s,Grade:%d,:Sno,:Cno,:Grade);)252.2.主变量主变量 (5)(5)在在SQLSQL语句中使用主变量和指示变量的方法语句中使用主变量和指示变量的方法 3)3)使用指示变量使用指示变量 指示变
18、量前必须加冒号标志指示变量前必须加冒号标志 必须紧跟在所指主变量之后必须紧跟在所指主变量之后说明:说明:在在SQLSQL语句之外语句之外(主语言语句中主语言语句中)使用主变使用主变量和指示,量和指示,可以直接引用,不必加分隔符可以直接引用,不必加分隔符 )263.3.游标游标(cursor)(cursor)(1)(1)为什么要使用游标为什么要使用游标 SQL语言与主语言具有不同数据处理方式语言与主语言具有不同数据处理方式SQLSQL语言是语言是面向集合面向集合的的主语言是主语言是面向记录面向记录的的 主变量不能完全满足主变量不能完全满足SQLSQL语句向应用程序输语句向应用程序输出数据的要求。
19、出数据的要求。游标用来游标用来协调协调这两种不同的处理方式这两种不同的处理方式 )27(2)(2)什么是游标什么是游标游标是系统为用户开设的一个游标是系统为用户开设的一个数据缓冲区数据缓冲区,存放存放SQLSQL语句的执行结果;语句的执行结果;每个游标区都有一个名字;每个游标区都有一个名字;用户可以用用户可以用SQLSQL语句逐一从游标中获取记录语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。并赋给主变量,交由主语言进一步处理。3.3.游标游标(cursor)(cursor)28(3)(3)嵌入式嵌入式SQLSQL的的工作原理工作原理SQLSQL语句与主语言语句语句与主语言语句分
20、工明确分工明确 SQLSQL语句:直接与数据库打交道语句:直接与数据库打交道 主语言语句:主语言语句:控制程序流程控制程序流程 对对SQLSQL语句结果做进一步处理语句结果做进一步处理SQLSQL语句用主变量从主语言中接收语句用主变量从主语言中接收执行参数执行参数,操纵,操纵数据库数据库SQLSQL语句的语句的执行状态执行状态由由DBMSDBMS送至送至SQLCASQLCA中中3.3.游标游标(cursor)(cursor)29(3)(3)嵌入式嵌入式SQLSQL的的工作原理工作原理(续续)主语言程序从主语言程序从SQLCASQLCA中取出状态信息,据此决定下中取出状态信息,据此决定下一步操作
21、一步操作如果如果SQLSQL语句成功地检索出数据,则通过主变量传语句成功地检索出数据,则通过主变量传给主语言做进一步处理给主语言做进一步处理SQLSQL语言和主语言的不同数据处理方式通过语言和主语言的不同数据处理方式通过游标来游标来协调协调3.3.游标游标(cursor)(cursor)308.1.2 8.1.2 嵌入式嵌入式SQLSQL语句与主语言之间的通信语句与主语言之间的通信4.4.4.4.建立和关闭数据库连接建立和关闭数据库连接建立和关闭数据库连接建立和关闭数据库连接(1)(1)建立数据库的连接建立数据库的连接建立数据库的连接建立数据库的连接 EXEC SQL CONNECT TO t
22、arget AS connection-name USER user-name;其中:其中:targettarget:为要连接的数据库服务器,为要连接的数据库服务器,格式:格式:connection-nameconnection-name:标识一个程序同时建立的多个:标识一个程序同时建立的多个 连接,只有一个连接时可以省略。连接,只有一个连接时可以省略。(2)(2)关闭数据库连接关闭数据库连接关闭数据库连接关闭数据库连接 EXEC SQL DISCONNECT connection;)31例:带有嵌入式例:带有嵌入式例:带有嵌入式例:带有嵌入式SQLSQLSQLSQL的一小段的一小段的一小段的
23、一小段C C C C程序程序程序程序EXEC SQL begin declare section;/*(1)/*(1)说明主变量说明主变量说明主变量说明主变量*/char deptn20;char Hsno9;char Hsname20;char Hsex2;int Hage;int newage;EXEC SQL end declare section;long sqlcode;EXEC SQL include sqlca;/*(2)/*(2)定义定义定义定义SQLSQL通信区通信区通信区通信区*/)32例:带有嵌入式例:带有嵌入式例:带有嵌入式例:带有嵌入式SQLSQLSQLSQL的一小段
24、的一小段的一小段的一小段C C C C程序程序程序程序int main()int count=0;char yn;printf(please choose the department name(cs/is):);scanf(%s,&deptn);EXEC SQL connect to textlocalhost:54321 user system/manager;EXEC SQL DECLARE SX CURSOR FOR /*(3)定义游标定义游标*/SELECT Sno,Sname,Ssex,Sage FROM student where Sdept=:deptn;EXEC SQL OP
25、EN sx;/*(4)打开游标操作打开游标操作*/)33例:带有嵌入式例:带有嵌入式SQLSQL的一小段的一小段C C程序程序for(;)EXEC SQL fetch sx into:hsno,:hname,:hsex,:hage;if(sqlca.sqlcode!=0)break;printf(%-10s%-20s%-10s%-10d n,hsno,hsname,hsex,hsage)printf(update age(y/n)?);do scanf(%c,&yn);while(yn!=N&yn!=n&yn!=y&yn!=Y);if(yn=y|yn=Y)348.1 8.1 嵌入式嵌入式SQL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第08章 数据库编程1 08 数据库 编程
限制150内