数据库-第八章-数据库编程

1、本章讲的是什么?
在应用系统中如何使用编程方法对数据库进行操纵的技术。

2、在应用系统中使用SQL编程来访问和管理数据库中数据的方式主要有?
嵌入式SQL、过程化SQL、存储过程和自定义函数、开放数据库互连、OLEDB(对象连接和嵌入数据库)、JDBC(java数据库连接)

3、什么是嵌入式SQL?
是将SQL语句嵌入程序设计语言中。
被嵌入的程序设计语言如C/C++/JAVA,被称为宿主语言,简称主语言。

4、嵌入式SQL和程序设计语言是如何被编译的?
数据库管理系统的预处理程序,扫描源程序,发现嵌入式SQL语句,把它们转换成主语言的调用语句,
使得主语言的编译程序能够识别它们,
然后由主语言的编译程序将程序编译成目标码。

5、为了尽快区分SQL语句和主语言语句,我们要干嘛?
加前缀。
C:
EXEC SQL <SQL语句>;
java:

SQL{<SQL语句>};

6、嵌入式SQL语句和主语言之间的分工是怎么样的?
SQL语句负责操纵数据库,
高级语言语句负责控制逻辑流程。

7、这时程序会有两种不同计算模型的语句,它们是如何通信的呢?
数据库工作单元与源程序工作单元之间的通信包括:

7、1 SQL->主语言
向主语言传递SQL语句的执行状态信息,使得主语言能够根据此信息控制程序流程,
通过SQL通信区(SQLCA)实现。
7、2 主语言->SQL
主语言向SQL语句提供参数,主要用主变量实现。
7、3 SQL->主语言
将SQL语句查询数据库的结果交给主语言处理,
主要用主变量和游标来实现。

8、SQL语句执行后,会发生什么?
系统要反馈给应用程序若干信息,主要包括描述系统当前工作状态和
运行环境的各种数据。这些信息将送到SQL通信区中,应用程序从SQL通信区中取出
这些状态信息,据此决定接下来执行的语句。

9、SQL通信区在应用程序中用?加以定义?
EXEC SQL INCLUDE SQLCA

10、SQL通信区中有一个变量SQLCODE,有什么用?
用来存放每次执行SQL语句后返回的代码。

应用程序每执行完一条SQL语句之后都应该测试一下SQLCODE的值,以了解该SQL
语句执行情况并做相应处理。
如果SQLCODE等于预定义的常量SUCCESS,则表示SQL语句成功,
否则在SQLCODE存放错误代码。程序员可以根据错误代码查找问题。

11、什么是主变量?
嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。
SQL语句中使用的主语言程序变量简称为主变量。
主变量根据其作用的不同分为输入主变量和输出主变量。

12、输入主变量和输出主变量怎么用?
输入主变量由应用程序对其赋值,SQL语句引用;
输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序。

13、指示变量是怎么来的?
一个主变量可以附带一个任选的指示变量指示变量。

14、指示变量是什么类型?有什么用?
整型变量。
用来“指示”所指主变量的值或条件。
指示变量可以指示输入主变量是否为空值,
可以检测输出主变量是否为空值,值是否被截断。

15、所有主变量和指示变量必须在SQL语句的哪里之间进行说明?
begin declare section 与
end declare section之间进行说明。

16、说明之后有什么用?
说明之后,主变量可以在SQL语句中任何一个能够
使用表达式的地方出现

17、为什么SQL语句中的主变量名和指示变量前要加冒号(😃 作为标志?
为了与数据库对象名(表名、视图名、列名等)区别。

18、SQL和是面向什么?
SQL面向集合
一条SQL语句可以产生或处理多条记录;
主语言面向记录
一组主变量一次只能存放一条记录。

所以主变量不能满足SQL语句向
应用程序输出数据的要求。
引入了游标的概念。

19、游标是什么?有什么用?
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,

20、用户可以用游标来做什么?
每个游标区都有一个名字。
用户可以通过游标逐一获取记录并赋给主变量,交由主语言进一步处理。

21、嵌入式SQL程序要访问数据库必须先?
连接数据库,
关系数据库管理系统根据用户信息对连接请求进行合法性验证,
只有通过了身份验证,才能建立一个可用的合法连接。

22、建立连接的嵌入式SQL语句是
C: EXEC SQL CONNECT TO target[AS connection-name][USER user-name];
Java: # SQL{[SQL语句]};

SQL{[CONNECT TO target[AS connection-name][USER user-name]]};

23、target有什么用?它是什么东西?
target是要连接数据库服务器,
它可以是,一个常见的服务器标识串,如@:
还可以是,服务器标识的SQL串常量,
也可以是,defualt。

24、connection-name是什么?
可选的连接名。

25、连接名必须是一个?有什么用?
有效的标识符,
主要用来识别一个程序内同时建立的多个连接,
如果在整个程序内只有一个连接,也可以不指定连接名。

26、如果程序运行过程中建立了多个连接,执行的所有数据库单元的工作都在哪里?
都该操作提交时所选择的当前连接上。

27、程序运行过程中可以修改当前连接,对应的嵌入式SQL语句为?
c:EXEC SQL SET CONNECTION connection-name|default;
java:# SQL {[SET CONNECTION connection-name|default]};

28、当某个连接上的所有数据库操作完成后,
应用程序应该主动释放所占用的连接资源。关闭数据库连接的嵌入式SQL语句是?
c:EXEC SQL DISCONNECT [connection];
java:# SQL {[DISCONNECT [connection]]};

其中connection是什么?
是EXEC SQL CONNCT 所建立的数据库连接。

29、哪些嵌入式SQL语句不需要使用游标?
它们是说明性语句、数据定义语句、数据控制语句、
查询结果为单记录的SELECT语句、非CURRENT形式的增删改语句。

30、查询结果为单记录的SELECT语句
这类语句因为查询结果只有一个,
只需用into子句指定
存放查询结果的主变量,
不需要使用游标。

EXEC SQL SELECT Sno,Sname,Ssex,Sage,Sdept
Into :Hsno,:Hname;:Hsex,:Hage,:Hdept
FROM Student
WHERE Sno=:givensno;/把要查询的学生的学号赋给了主变量givensno/

31、使用查询结果为单记录的SELECT语句需要注意几点?
1、INTO子句、WHERE子句和HAVING短语的条件表达式中均可以使用主变量。
2、查询结果为空值的处理。查询返回的记录中可能某些列为空值NULL。为了表示
空值,在INTO子句的主变量后面跟有指示变量,当查询得出的某个数据项为空值时,系
统会自动将相应主变量后面的指示变量置为负值,而不再向该主变量赋值。所以当指示变
量值为负值时,不管主变量为何值,均认为主变量值为NULL。
3、如果查询结果实际上并不是单条记录,而是多条记录,则程序出错,关系数据库
管理系统会在SQL通信区中返回错误信息。

32、非CURRENT形式的增删改语句
在UPDATE的SET子句和WHERE子句中可以使用主变量,SET子句还可以使用指示变量。

33、必须使用游标的SQL语句有查询结果为多条记录的SELECT语句、CURRENT形式的UPDATE和DELETE语句。

34、SELECT语句查询结果是多条记录,
因此需要用游标机制将多条记录一次条地送主程序处理,
从而把对集合的操作转换为对单个记录的处理。

35、使用游标的步骤为?
定义游标
EXEC SQL DECLARE 游标名 cursor for select语句;

打开游标
EXEC SQL OPEN 游标名;

推进游标指针并取当前记录
EXEC SQL FETCH 游标名
INTO <主变量>[<指示变量>][,<主变量>[<指示变量]-*;
其中主变量必须与SELECT语句中的目标列表达式具有一一对应关系。

关闭游标
EXEC SQL CLOSE 游标名;

36、一般是怎么处理的?
用FETCH语句把游标指针向前推进一条记录,同时将缓冲区中的当前记录取出来
送至主变量供主语言进一步处理。通过循环执行FETCH语句逐条取出结果集中的行进
行处理。

37、什么时候要用动态SQL语句?
某些应用可能要到执行时才能够确定要提交的SQL语句、查询的条件。

动态SQL支持动态组装SQL语句和动态参数两种形式。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
38、变量如何定义?

在这里插入图片描述
在这里插入图片描述

1、过程和函数是命名块,它们被编译后保存在数据库中,称为持久性存储模块,可以被反复调用,运行速度较快。

2、存储过程是什么意思?
存储过程是由过程化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服
务器中,因此称它为存储过程,使用时只要调用即可。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值