文档介绍:第八章数据库编程
嵌入式SQL
存储过程
ODBC编程
JDBC
ADO简介
嵌入式 SQL
SQL语言提供了两种不同的使用方式:
交互式
嵌入式
将SQL语句嵌入到其它宿主语言编写的程序中,作为宿主语言的子语言,使宿主语言具备访问数据库的能力。
宿主语言:COBOL, C, Pascal, Fortran, VC++, VB, DEPHI, CB等能嵌入SQL语句的高级语言。
宿主语言本身不能直接识别SQL语句。
为什么要引入嵌入式SQL
SQL语言是非过程性语言
事务处理应用需要高级语言
这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充。
把SQL嵌入到其他高级语言中,必须解决的三个问题:
语句识别——如何区分SQL语句和主语言语句。
数据交换——由主语言提出的操作或数据,如何让数据库管理系统执行,由数据库查询出的数据如何交由主语言处理。
协调主语言的单记录操作和数据库的集合操作。
嵌入式SQL的处理过程
对宿主型数据库语言SQL(ESQL),DBMS采用预编译方法处理:
,识别出SQL语句
,以使主语言编译程序能识别它
。
主语言程序含
ESQL语句
ESQL语句转换
为函数调用
目标语言程序
RDBMS的
预处理程序
主语言
编译程序
ESQL基本处理过程
嵌入式SQL的处理过程
为了能够区分SQL语句与主语言语句,所有的SQL语句必需要有前缀EXEC SQL,以(;)结束,嵌入式SQL语句的一般形式
EXEC SQL <SQL语句>;
例:EXEC SQL DROP TABLE Student;
嵌入式SQL语句与主语言之间的通信
将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句。
SQL语句
描述性的面向集合的语句
负责操纵数据库
高级语言语句
过程性的面向记录的语句
负责控制程序流程
嵌入式SQL语句与主语言之间的通信主要是指:描述性面向集合与过程性面向纪录(元组)语句之间的通信。
工作单元之间的通信方式
SQL通信区
向主语言传递SQL语句的执行状态信息,主语言能够据此控制程序流程。
主变量
1)主语言向SQL语句提供参数。
2)将SQL语句查询数据库的结果交主语言进一步处理。
游标
解决集合性操作语言与过程性操作语言的不匹配。
一、 SQL通信区
SQLCA: munication Area
是一个数据结构——存放状态信息供程序读取。
SQLCA的用途
SQL语句执行后,DBMS反馈给应用程序信息
描述系统当前工作状态
描述运行环境
这些信息将送到SQL通信区SQLCA中,应用程序从SQLCA中取出这些状态信息,据此决定接下来执行的语句
定义SQLCA
用EXEC SQL INCLUDE SQLCA加以定义
使用SQLCA
SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE ;
ESS,则表示SQL语句成功,否则在SQLCODE 存放错误代码;
应用程序每执行完一条SQL 语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。
二、主变量
什么是主变量
嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据,在SQL语句中使用的主语言程序变量简称为主变量(Host Variable)
主变量的类型
输入主变量---由应用程序对其赋值,SQL语句引用。
输出主变量--由SQL语句赋值或设置状态信息,返回给应用程序。
一个主变量有可能既是输入主变量又是输出主变量
定义SQLCA
用EXEC SQL INCLUDE SQLCA加以定义
使用SQLCA
SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE ;
ESS,则表示SQL语句成功,否则在SQLCODE 存放错误代码;
应用程序每执行完一条SQL 语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。
指示变量
一个主变量可以附带一个指示变量(Indicator Variable)
什么是指示变量
整型变量
用来“指示”所指主变量的值或条件。
指示变量的用途
指示变量可以输入主变量是否为空值
指示变量可以检测输出主变量是否为空值,值是否被截断。