数据库系统——第九讲 嵌入式SQL语言之基本技巧

  • 嵌入式SQL语言概述
    • (1)交互式SQL语言的局限
    • (2)嵌入式SQL语言
    • (3)高级语言中使用嵌入式SQL语言需要解决的问题
  • 变量声明与数据库连接
    • (1)变量的声明与使用:
    • (2)程序与数据库的连接与断开
    • (3)SQL执行的提交与撤销
    • (4)事务的概念与特性
    • (5)事务的概念与特性
  • 数据集与游标
    • (1)如何读取单行数据和多行数据
    • (2)游标的使用概览
  • 可滚动游标与数据库的增删改
    • (1)可滚动游标的概念
    • (2)可滚动游标的定义和使用
    • (3)数据的删除与更新
  • 状态捕获及错误处理机制
    • (1)基本机制
    • (2)状态信息
  • 小结

嵌入式SQL语言概述

重点与难点:数据库语言嵌入到高级语言中使用需要解决的问题—过程及其思维

(1)交互式SQL语言的局限

交互式SQL语言有很多优点:
 记录集合操作
 非过程性操作:指出要做什么,而不需指出怎样做
 一条语句就可实现复杂查询的结果
然而,交互式SQL本身也有很多局限… …

  • 从使用者角度:专业人员可熟练写出SQL语句,但大部分的普通用户…
  • 从SQL本身角度:特别复杂的检索结果难以用一条交互式SQL语句完成,此时需要结合高级语言中经常出现的顺序、分支和循环结构来帮助处理

(2)嵌入式SQL语言

因此,高级语言+SQL语言
 既继承高级语言的过程控制性
 又结合SQL语言的复杂结果集操作的非过程性
 同时又为数据库操作者提供安全可靠的操作方式:通过应用程序进行操作
嵌入式SQL语言
 将SQL语言嵌入到某一种高级语言中使用
 这种高级语言,如C/C++, Java, PowerBuilder等,又称宿主语言(Host Language)
 嵌入在宿主语言中的SQL与前面介绍的交互式SQL有一些不同的操作方式

(3)高级语言中使用嵌入式SQL语言需要解决的问题


变量声明与数据库连接

(1)变量的声明与使用:

在嵌入式SQL语句中可以出现宿主语言语句所使用的变量:
exec sql select Sname, Sage into :vSname, :vSage from Student where Sname= :specName;
这些变量需要特殊的声明:
exec sql begin declare section;
char vSname[10], specName[10]=“张三”;
int vSage;
exec sql end declare section;

变量声明和赋值中,要注意:
宿主程序的字符串变量长度应比字符型字段的长度多1个。因宿主程序的字符串尾部多一个终止符为‘\0‘,而程序中用双引号来描述。
宿主程序变量类型与数据库字段类型之间有些是有差异的,有些DBMS可支持自动转换,有些不能。

(2)程序与数据库的连接与断开

程序与数据库的连接和断开
在嵌入式SQL程序执行之前,首先要与数据库进行连接
不同DBMS,具体连接语句的语法略有差异
SQL标准中建议的连接语法为:
execsql connecttotarget-server asconnect-name useruser-name;

execsql connecttodefault;
Oracle中数据库连接:
execsql connect:user_name identified by :user_pwd;
DB2 UDB中数据库连接:
execsql connecttomydb user:user_name using:user_pwd;
 在嵌入式SQL程序执行之后,需要与数据库断开连接
 SQL标准中建议的断开连接的语法为:
exec sql disconnect connect-name;

exec sql disconnect current;
 Oracle中断开连接:
exec sql commit release;

exec sql rollback release;
 DB2 UDB中断开连接:
exec sql connect reset;
exec sql disconnect current;

(3)SQL执行的提交与撤销

SQL执行的提交与撤消
SQL语句在执行过程中,必须有提交和撤消语句才能确认其操作结果
SQL执行的
提交

execsql commitwork;
SQL执行的撤消**:
execsql rollbackwork;
为此,很多DBMS都设计了捆绑提交/撤消与断开连接在一起的语句,以保证在断开连接之前使用户确认提交或撤消先前的工作,例如Oracle中:
execsql commitrelease;

execsql rollbackrelease;

(4)事务的概念与特性

事务:

  • (从应用程序员角度)
    是一个存取或改变数据库内容的程序的一次执行,或者说一条或多条SQL语句的一次执行被看作一个事务
    事务一般是由应用程序员提出,因此有开始和结束,结束前需要提交或撤消。
    BeginTransaction
    execsql …

    execsql …
    execsql commit work |execsql rollback work
    EndTransaction

注意:在嵌入式SQL程序中,任何一条数据库操纵语句(如execsqlselect等)都会引发一个新事务的开始,只要该程序当前没有正在处理的事务。而事务的结束是需要应用程序员通过commit或rollback确认的。因此BeginTransaction和EndTransaction两行语句是不需要的。

  • (从微观角度,或者从DBMS角度)
    是数据库管理系统提供的控制数据操作的一种手段,通过这一手段,应用程序员将一系列的数据库操作组合在一起作为一个整体进行操作和控制,以便数据库管理系统能够提供一致性状态转换的保证。

(5)事务的概念与特性

事务的特性: ACID
原子性Atomicity : DBMS能够保证事务的一组更新操作是原子不可分的,即对DB而言,要么全做,要么全不做
一致性Consistency: DBMS保证事务的操作状态是正确的,符合一致性的操作规则,它是进一步由隔离性来保证的
隔离性Isolation: DBMS保证并发执行的多个事务之间互相不受影响。例如两个事务T1和T2, 即使并发执行,也相当于或者先执行了T1,再执行T2;或者先执行了T2, 再执行T1。
持久性Durability: DBMS保证已提交事务的影响是持久的,被撤销事务的影响是可恢复的。
换句话说:具有ACID特性的若干数据库基本操作的组合体被称为事务。


数据集与游标

重点与难点:怎样在高级语言中处理数据集—游标的使用技巧

(1)如何读取单行数据和多行数据

单行结果处理与多行结果处理的差异(Into子句与游标(Cursor))

  1. 检索单行结果,可将结果直接传送到宿主程序的变量中
  2. 检索多行结果,则需使用游标(Cursor)

(2)游标的使用概览

游标(Cursor)的使用需要先定义、再打开(执行)、接着一条接一条处理,最后再关闭
exec sql declare cur_student cursor for
select Sno, Sname, Sclass from Student where Sclass=‘035101’ ;
exec sql open cur_student;
exec sql fetch cur_student into :vSno, :vSname, :vSclass;
… …
exec sql close cur_student;

游标可以定义一次,多次打开(多次执行),多次关闭


可滚动游标与数据库的增删改

(1)可滚动游标的概念

ODBC支持的可滚动Cursor
标准的游标始终是自开始向结束方向移动的,每fetch一次,向结束方向移动一次;一条记录只能被访问一次;再次访问该记录只能关闭游标后重新打开
ODBC(OpenDataBase Connectivity)是一种跨DBMS的DB操作平台,它在应用程序与实际的DBMS之间提供了一种通用接口
许多实际的DBMS并不支持可滚动游标,但通过ODBC可以使用该功能

(2)可滚动游标的定义和使用

可滚动游标是可使游标指针在记录集之间灵活移动、使每条记录可以反复被访问的一种游标

NEXT向结束方向移动一条; PRIOR向开始方向移动一条;FIRST回到第一条;LAST移动到最后一条;ABSOLUTvalue_spec定向检索指定位置的行,value_spec由1至当前记录集最大值;RELATIVEvalue_spec相对当前记录向前或向后移动,value_spec为正数向结束方向移动,为负数向开始方向移动
可滚动游标移动时需判断是否到结束位置,或到起始位置

(3)数据的删除与更新

一种是查找删除(与交互式DELETE语句相同),一种是定位删除
EXEC SQL DELETE FROM tablename [corr_name]
WHERE search_condition | WHERE CURRENT OF cursor_name;

一种是查找更新(与交互式Update语句相同),一种是定位更新
EXEC SQL UPDATE tablename [corr_name]
SET columnname = expr [, columnname = expr …]
[ WHERE search_condition ] | WHERE CURRENT OF cursor_name


状态捕获及错误处理机制

重点与难点:错误捕获机制—设置错误陷阱与SQLCA的作用与使用

(1)基本机制

状态,是嵌入式SQL语句的执行状态,尤其指一些出错状态;有时程序需要知道这些状态并对这些状态进行处理
嵌入式 SQL程序中,状态捕获及处理有三部分构成:

  1. 设置SQL通信区:一般在嵌入式SQL程序的开始处便设置(exec sql include sqlca)
  2. 设置状态捕获语句:在嵌入式SQL程序的任何位置都可设置;可多次设置;但有作用域(exec sql whenever sqlerror goto report_error;)
  3. 状态处理语句:某一段程序以应对SQL操作的某种状态(report_error: exec sql rollback;)

状态捕获语句:exec sql whenever condition action;
Whenever语句的作用是设置一个“条件陷阱”, 该条语句会对其后面的所有由Exec SQL语句所引起的对数据库系统的调用自动检查它是否满足条件(由condition指出)
如果满足condition, 则要采取一些动作(由action指出)

(2)状态信息

典型DBMS系统记录状态信息的三种方法:

  1. sqlcode:
    典型DBMS都提供一个sqlcode变量来记录其执行sql语句的状态,但不同DBMS定义的sqlcode值所代表的状态意义可能是不同的,需要查阅相关的DBMS资料来获取其含义。
  2. sqlca.sqlcode
    典型DBMS都提供一个sqlcode变量来记录其执行sql语句的状态,但不同DBMS定义的sqlcode值所代表的状态意义可能是不同的,需要查阅相关的DBMS资料来获取其含义。
  3. sqlstate:
    有些DBMS提供的记录状态信息的变量是sqlstate或sqlca.sqlstate

小结

数据库系统——第九讲 嵌入式SQL语言之基本技巧相关推荐

  1. 嵌入式sql语句oracle,第十讲 嵌入式SQL语言之动态SQL

    动态SQL的概念 静态SQL特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量(高级语言程序语句中不带冒号) 传送给嵌入式SQL语句即可(嵌入式SQL语句中带冒号) 例如: SpecNa ...

  2. 哈工大数据库系统(上):嵌入式SQL语言之动态SQL(十)课后测验与作业

    文章目录 前引 第十章课后习题 前引 关于这部分 我的JDBC基本上没怎么听 都跳过了 - - 因为真的记不住 不是叫记不住吧 是因为我现在连基本的连接 数据库操作都没有怎么练 就开始到嵌入式的语言 ...

  3. 【数据库系统】嵌入式SQL语言查询编程

    学生表S(SNO,SNAME,SSEX,SAGE,SADDR) 要求:使用嵌入SQL对数据库进行单表精确查询.模糊查询 主语言:Java 平台:Eclipse DBMS:SQL SERVER 2019 ...

  4. c语言编码风格,讲嵌入式C语言编码风格.ppt

    讲嵌入式C语言编码风格 目 录 简介及说明 语言规则 1.基础 2.数据 3.说明与表达式 4.函数 5.内存及资源 6.源文件 风格指导 7.程序书写 8.命名 9.文档 简介及说明 正确性 易维护 ...

  5. 嵌入式C语言优化小技巧

    嵌入式C语言优化小技巧 1 概述 嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高,响应速度快等优点,目前已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环境的 ...

  6. 第2讲:SQL语言的通用语法及分类

    SQL语言的通用语法及分类 文章目录 SQL语言的通用语法及分类 1.SQL语言的通用语法格式 2.SQL语言的几种分类 1.SQL语言的通用语法格式 2.SQL语言的几种分类 1.SQL语言的通用语 ...

  7. c语言数据结构常考算法,第6讲嵌入式C语言_常见数据结构及算法..docx

    /复习结构.联合.枚举 /复习结构.联合.枚举Page 3 GDAIB Embedded C Programming 嵌入式c语言编程--常见数据结构及算法 Data Structure and Ar ...

  8. sqlserver战德臣_数据库系统基础讲义第06讲SQL语言之概览.pdf

    数据库系统基础讲义第06讲SQL语言之概览.pdf 数据库系统之二 --数据库语言-SQL 战德臣 哈尔滨工业大学 教授.博士生导师 黑龙江省教学名师 教育部大学计算机课程教学指导委员会委员 Rese ...

  9. VB中的SQL语言——增、删、改、查

    结构化查询语言简称SQL,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.SQL语言主要有四个部分:数据定义语言.数据操纵语言.嵌入式SQL语言的使用规定.数据控 ...

最新文章

  1. Nagios 监控实例部署
  2. 【自然框架】稳定版的Demo——看点二:权限,权限过滤与验证。
  3. 在Servlet中处理表单提交的数据
  4. AVFoundation 简介
  5. 天津市职高高一计算机试题及答案,职高(中职)数学(基础模块)上册题库.doc
  6. 高级数据结构与算法 | AVL树 (高度平衡树)
  7. mysql那本书适合初学者_3本书适合初学者
  8. leetcode 59. 螺旋矩阵 II(递归)
  9. matlab距离保护程序,基于MATLAB的距离保护仿真.doc
  10. java控制台输入汉字_给我一个JAVA控制台输入中文的实例
  11. Android Studio eclipse 调试技巧
  12. 堆排序的Python实现
  13. TypeError: this.getResolve is not a function
  14. 计算机科学和机器学习中的代数、拓扑、微积分和最优化理论
  15. DIY个性家装心得家用电动工具选择
  16. XCTF 攻防世界Web题目 mfw
  17. 通过拖拽改变图片大小
  18. 关于编程的自我介绍和规划。
  19. 固定资产盘点的问题及解决方案,云呐如何做固定资产盘点
  20. 文通Android平台证件识别SDK

热门文章

  1. python自动化测试脚本实例_Python+Selenium学习--自动化测试用例实例
  2. Mac险些变砖,记一次惨痛的恢复系统及找回数据
  3. FPGA配置启动详解系列(一)——配置文件详解
  4. 西安交大梁力上机实验第三章5,绝对温度为T的黑体,对波长为入的辐射功率为
  5. 2020Android开发者学习路线(快速篇),29岁vivo员工吐槽
  6. 国产手机厂商扎堆海外,vivo成国际化标杆
  7. qt实现撤销和恢复功能
  8. 使用 Eclipse 的 Restore from local history 功能恢复误删除的文件
  9. Pandas+Pyecharts | 20000+天猫订单数据可视化
  10. Web自动化【selenium】基础知识