3. 数据库应用程序体系结构
数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、DBA、用户组成。
本章介绍数据库应用程序的数据访问与数据库应用系统的体系结构。
郭文明
嵌入式SQL
为什么使用嵌入式SQL?
—有些数据访问任务对于交互式的非过程的SQL是无法完成的任务。
—使用交互式SQL,必须知道表名、列名并且能够写出符合语法的SQL语句。
—实际的应用系统是非常复杂的,数据库访问只是其中一个部件。有些动作如与用户交互、图形化显示数据等只能用高级语言实现。
嵌入到过程性主语言中使用的SQL称为嵌入式SQL。主语言可以是C或Java(不一定是Windows环境).也可以是Visual Basic, Delphi (Windows环境)等。
ORACLE的Pro*C即是使用嵌入式SQL的平台。
郭文明
嵌入式SQL
把SQL嵌入主语言使用时必须解决的三个问题:
SQL语句与主语言语句,用EXEC SQL开始.
.
SQL语句可以使用主语言的程序变量(简称主变量),这些变量名前加冒号(:)作标志,以区别于字段名。这些变量由BEGIN DECLARE SECTION与END DECLARE SECTION语句之间说明.
主语言中不能引用数据库中的字段变量.
SQL语句执行后,系统要反馈给应用程序若干信息,这些信息送到SQL的通信区SQLCA。SQLCA 用语句EXEC SQL INCLUDE加以定义。
,而主语言一次只能处理一个记录,为此必须协调两种处理方式。这是用游标来解决的。
郭文明
嵌入式SQL
主语言+ 嵌入SQL
预处理
主语言+ 函数调用
主语言编译器
主语言执行程序
预处理器把嵌入的SQL语句从主程序命令中分离出来,转换成相应的主语言语句. 例:
,.
:
proc iname=
,其中SQL语句被纯c语句(Orcale运行期库函数)替换.
cc -c ,.
4. 连编生成可执行文件.
嵌入式SQL的执行
郭文明
C语言中嵌入式SQL
#include <>
#include “”
exec sql include sqlca; /*声明通讯区*/
char cid_prompt[]=“请输入顾客号:”;
int main( )
{
exec sql begin declare section;
char cust_id[5],cust_name[14];
float t;
char user_name[20],user_ped[20];
exec sql end declare section;
/*声明变量*/
exec sql whenever sqlerror goto report_error;
exec sql whenever not found goto notfound;
/*出错处理*/
strcpy(user_name,”mytest”);
strcpy(user_pwd,”test”);
exec sql connect :user_name
identified by :user_pwd; /*连接*/
while((prompt(cid_prompt,1,cust_id,4))>=0)
{
exec sql ame,t
into :cust_name,:t
from customers where cid=:cust_id;
exec mit work;
printf(“顾客名: %s 折扣率: %\n”,
cust_name,t);
continue;
notfound: printf(“没找到%s,继续\n”,cust_id);
} /*根据输入的顾客ID查询顾客信息*/
exec mit release; /*正常释放连接*/
return 0;
report_error:
print_dberror(); /*出错信息*/
exec sql rollback release; /*释放连接*/
return 1;
}
北京邮电大学软件工程研究生的课程---数据库设计开发-3.1 来自淘豆网m.daumloan.com转载请标明出处.