数据库原理及应用幻灯片.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据库原理及应用幻灯片.ppt》由会员分享,可在线阅读,更多相关《数据库原理及应用幻灯片.ppt(29页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、数据库原理及应用第1页,共29页,编辑于2022年,星期六l 嵌入式SQL是指在程序内执行的SQL语句,它强调这些SQL语句是“嵌入”在编程语言的常规语句中的。Java中标准的嵌入式SQL称为SQLJ,可以在ORACLE、INFORMIX、DB2 UDB中使用,也可以通过JDBC在Java中使用,JDBC是标准Java的一部分,用来连接任何数据库。我们将重点放在C语言编写的嵌入式SQL程序。l 在本章中,我们将会碰到两种数据库系统的差别,即 oracle 和 db2 udb 第2页,共29页,编辑于2022年,星期六5.1 C语言中嵌入语言中嵌入SQL的介绍的介绍l关键词 exec sql声明
2、SQL语句嵌入到宿主语言源文件中。l 例如:exec sql select count(*)into:host_varl from customers;l注:1、exec sql可以扩展到该文件的多行。l 2、在嵌入式SQL中使用宿主变量时必须l 加(:)l 例:假如字符串变量cust_id在C程序中被赋值l 为“c001”第3页,共29页,编辑于2022年,星期六lexec sql select cname,discnt l into:cust_name,:cust_discntl from customers where cid=:cust_idl则检索到顾客编号为c001的顾客的名字和折
3、扣率,并将它们分别赋值给变量cust_name,l cust_discnt。l 当然,要在嵌入式SQL中使用这些宿主变量,必须先声明它们,包括对预编译程序的声明。第4页,共29页,编辑于2022年,星期六l exec sql begin declare section;l char cust_id5=“c001”;l char cust_name14;l float cust_discnt;l exec sql end declare section;l这三个变量的声明是标准的C语言中的声明,出现在begin declare 和 end declare语句之间,这是预编译程序和C语言程序都能理
4、解的相同的格式。嵌入式SQL中使用的宿主变量必须能被数据库系统识别。第5页,共29页,编辑于2022年,星期六l 在在SQL中建立和释放数据库连接:中建立和释放数据库连接:l 考虑怎样与数据库管理系统建立数据库连接。l 在Full SQL-99中 连接到SQL数据库的语法:l exec sql connect to target-server l as connect-nameuser usernamel或 exec sql connect to defaultltarget-server是目标数据库名,connect-name是对这次该数据库连接的一个名字,以后当再次使用是,可以直接引用它;
5、username是该数据库的一个合法用户名。connect to default是默认数据库的连接。第6页,共29页,编辑于2022年,星期六l由于不同平台在用户识别、权限要求方面的可变性,connect语句并不是Entry SQL-92和Core SQL-99的一部分。l 在ORACLE和DB2 UDB中,字符串常量通常不能直接作为connect语句的参数,我们需要首先声明:exec sql begin declare section;l char user_name10,user_pwd10;l exec sql end declare section;l设口令“1234”,我们对上述变量
6、初始化:l strcpy(user_name,”cap”);l strcpy(user_pwd,”1234”);第7页,共29页,编辑于2022年,星期六l那么在DB2 中嵌入式SQL的Connect语句为:exec sql connect to cap:user_name using:user_pwd;在ORACLE中嵌入式SQL的Connect语句为:exec sql connect:user_name identified by:user_pwd;简单的断开连接:exec sql disconnect current /connect_name;注意:注意:在断开连接之前,必须对成功的事
7、务提交确认,或是对失败的事务回滚以撤消已做的工作,否则直接断开连接会失败。第8页,共29页,编辑于2022年,星期六l对成功的任务结束为:lexec sql commit work;l exec sql disconnect current;l对 失败的任务结束则为:l exec sql rollback work;l exec sql disconnect current;l在ORACLE中 可以使用l exec sql commit release;l 或 exec sql rollback release;第9页,共29页,编辑于2022年,星期六l例5.1.1 实现一个嵌入式SQL程序
8、,要求程序不断提示用户输入一个顾客的cid,显示该顾客的名字和折扣,当用户输入一个空字符串则程序终止。l 程序头如下:l#include l#include”prompt.h”l/*header for dbs sqlca structure*/l exec sql include sqlca;l char cid_prompt=“please enter customer id”;第10页,共29页,编辑于2022年,星期六l程序主体代码:l int main()l exec sql begin declare section;l char cust_id5,cust_name14;l fl
9、oat cust_discnt;l char user_name20,user_pwd20;l exec sql end declare section;l exec sql whenever sqlerror goto report_error;l exec sql whenever not found goto notfound;l strcpy(user_name,”cap”);l strcpy(user_pwd,”1234”);l exec sql connect:user_name identified by:user_pwd;第11页,共29页,编辑于2022年,星期六 while
10、(prompt(cid_prompt,1,cust_id,4)=0)exec sql select cname,discnt into:cust_name,l :cust_discnt from customers where cid=:cust_id;l exec sql commit work;l printf(“customers name is%s and discnt is%5.1f”,l cust_name,cust_discnt);l continue;lnotfound:printf(“cant find%s“,cust_id)exec sql commit release;r
11、eturn 0;report_error:print_dberror();exec sql rollback release;return 1;第12页,共29页,编辑于2022年,星期六l程序说明:l print_dberror()函数显示数据库系统的错误消息,l如ORACLE中的“ORA-00942:table or view does not exist”。l prompt函数提示用户交互,prompt函数也可以接受用户输入的多个标记,若用户在提示行上键入回车,则返回结果小于0。l C语言编译程序不能识别嵌入式exec sql语句的语法,所以源程序必须先通过预编译程序将其转换成C中的正确
12、语句。(参见附录B.3)lWhenever语句是条件处理语句,该语句使我们在遇到出错和其他情况时,控制程序的运行。第13页,共29页,编辑于2022年,星期六l其格式如下:l exec sql whenever condition action;l例 exec sql whenever sqlerror goto report_error;lWhenever设置了一个条件陷阱,这样会对所有后面由exec sql语句引起的对数据库系统的调用自动检查是否出错条件,若存在这样的出错条件,就必须采取规定的动作。l(1)条件 sqlerror 这些错误通常是由编程错误引起的。l并且错误代码依赖于某一特定
13、的DBMS。lnot found 执行某条SQL语句,如 insert、delete、update等,检测是否没有记录受到该SQL语句的影响。第14页,共29页,编辑于2022年,星期六lsqlwarning 检测不是错误但应该引起注意的条件。注意:sqlwarning不是Full SQL-92的标准。l(2)动作l continue 不采取任何动作,程序按正常流程l goto 标号标号 等同与C语言中的“goto标号”l stop 结束程序的运行,撤消当前的事务,断开与 l 数据库的连接l do函数函数(ORACLE)、call函数函数(INFORMIX)引发一个对已经命名的C函数的调用,这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 应用 幻灯片
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内