1、An Introduction to Database System数据库系统概论An Introduction to Database System第八章第八章 数据库编程数据库编程xx大学信息学院大学信息学院An Introduction to Database System第八章第八章 数据库编程数据库编程8.1 嵌入式嵌入式SQL8.2 过程化过程化SQL8.3 存储过程和函数存储过程和函数8.4 ODBC编程编程*8.5 OLE DB*8.6 JDBC编程编程8.7 小结小结An Introduction to Database System8.1 嵌入式嵌入式SQLvSQL语言提供
2、了两种不同的使用方式语言提供了两种不同的使用方式n交互式交互式n嵌入式嵌入式v为什么要引入嵌入式为什么要引入嵌入式SQLnSQL语言是非过程性语言语言是非过程性语言n事务处理应用需要高级语言事务处理应用需要高级语言v这两种方式细节上有差别,在程序设计的环境下,这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充语句要做某些必要的扩充An Introduction to Database System8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的处理过程的处理过程8.1.2 嵌入式嵌入式SQL语句与主语言之间的通信语句与主语言之间的通信8.1.3 不用游标的不用游
3、标的SQL语句语句8.1.4 使用游标的使用游标的SQL语句语句8.1.5 动态动态SQLAn Introduction to Database System8.1.1 嵌入式嵌入式SQL的处理过程的处理过程v主语言主语言n嵌入式嵌入式SQL是将是将SQL语句嵌入程序设计语言中,被嵌入语句嵌入程序设计语言中,被嵌入的程序设计语言,如的程序设计语言,如C、C+、Java,称为宿主语言,简,称为宿主语言,简称主语言。#称主语言。#v处理过程处理过程n预编译方法预编译方法An Introduction to Database System嵌入式嵌入式SQL的处理过程(续)的处理过程(续)关系数据库管
4、理系统预处关系数据库管理系统预处理程序转换嵌入式理程序转换嵌入式SQL语语句为函数调用句为函数调用含嵌入式含嵌入式SQL语句语句的主语言程序的主语言程序转换后的转换后的主语言程序主语言程序主语言编译程序主语言编译程序编译处理编译处理目标语言程序目标语言程序An Introduction to Database System嵌入式嵌入式SQL的处理过程(续)的处理过程(续)v为了区分为了区分SQL语句与主语言语句,所有语句与主语言语句,所有SQL语句语句必须加前缀必须加前缀EXEC SQL,主语言为主语言为C语言时,语句格式:#语言时,语句格式:#nEXEC SQL;#An Introducti
5、on to Database System8.1 嵌入式嵌入式SQL8.1.1 嵌入式嵌入式SQL的处理过程的处理过程8.1.2 嵌入式嵌入式SQL语句与主语言之间的通信语句与主语言之间的通信8.1.3 不用游标的不用游标的SQL语句语句8.1.4 使用游标的使用游标的SQL语句语句8.1.5 动态动态SQLAn Introduction to Database System8.1.2 嵌入式嵌入式SQL语句与主语言之间的通信语句与主语言之间的通信v将将SQL嵌入到高级语言中混合编程,程序中会含嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句有两种不同计算模型的语句nSQL语句语句
6、l 描述性的面向集合的语句描述性的面向集合的语句l 负责操纵数据库负责操纵数据库n高级语言语句高级语言语句l 过程性的面向记录的语句过程性的面向记录的语句l 负责控制逻辑流程负责控制逻辑流程n它们之间应该如何通信?#它们之间应该如何通信?#An Introduction to Database System嵌入式嵌入式SQL语句与主语言之间的通信(续)语句与主语言之间的通信(续)v数据库工作单元与源程序工作单元之间的通信数据库工作单元与源程序工作单元之间的通信(1)向主语言传递)向主语言传递SQL语句的执行状态信息,使主语言语句的执行状态信息,使主语言能够据此控制程序流程,主要用能够据此控制程
7、序流程,主要用SQL通信区实现通信区实现(2)主语言向)主语言向SQL语句提供参数,主要用主变量实现语句提供参数,主要用主变量实现(3)将)将SQL语句查询数据库的结果交主语言处理,主要语句查询数据库的结果交主语言处理,主要用主变量和游标实现用主变量和游标实现An Introduction to Database System1.SQL通信区通信区vSQLCA:#SQL Communication AreanSQLCA是一个数据结构是一个数据结构vSQLCA的用途的用途nSQL语句执行后,系统反馈给应用程序信息语句执行后,系统反馈给应用程序信息l 描述系统当前工作状态描述系统当前工作状态l 描
8、述运行环境描述运行环境n这些信息将送到这些信息将送到SQL通信区中通信区中n应用程序从应用程序从SQL通信区中取出这些状态信息,据此决通信区中取出这些状态信息,据此决定接下来执行的语句定接下来执行的语句An Introduction to Database SystemSQL通信区(续)通信区(续)vSQLCA使用方法使用方法n定义定义SQLCAl 用用EXEC SQL INCLUDE SQLCA定义定义n使用使用SQLCAlSQLCA中有一个存放每次执行中有一个存放每次执行SQL语句后返回代码的变语句后返回代码的变量量SQLCODEl如果如果SQLCODE等于预定义的常量等于预定义的常量SU
9、CCESS,则表示,则表示SQL语句成功,否则表示出错语句成功,否则表示出错l应用程序每执行完一条应用程序每执行完一条SQL 语句之后都应该测试一下语句之后都应该测试一下SQLCODE的值,以了解该的值,以了解该SQL语句执行情况并做相应语句执行情况并做相应处理处理An Introduction to Database System2.主变量主变量 v主变量主变量n嵌入式嵌入式SQL语句中可以使用主语言的程序变量来输入语句中可以使用主语言的程序变量来输入或输出数据或输出数据n在在SQL语句中使用的主语言程序变量简称为主变量语句中使用的主语言程序变量简称为主变量(Host Variable)An
10、 Introduction to Database System主变量(续)主变量(续)v主变量的类型主变量的类型n输入主变量输入主变量l由应用程序对其赋值,由应用程序对其赋值,SQL语句引用语句引用n输出主变量输出主变量l由由SQL语句对其赋值或设置状态信息,返回给应用程序语句对其赋值或设置状态信息,返回给应用程序An Introduction to Database System主变量(续)主变量(续)v指示变量指示变量n是一个整型变量,用来是一个整型变量,用来“指示指示”所指主变量的值或条件所指主变量的值或条件n一个主变量可以附带一个指示变量(一个主变量可以附带一个指示变量(Indica
11、tor Variable)n指示变量的用途指示变量的用途l指示输入主变量是否为空值指示输入主变量是否为空值l检测输出变量是否为空值,值是否被截断检测输出变量是否为空值,值是否被截断An Introduction to Database System主变量(续)主变量(续)v在在SQL语句中使用主变量和指示变量的方法语句中使用主变量和指示变量的方法n说明主变量和指示变量说明主变量和指示变量BEGIN DECLARE SECTION.(说明主变量和指示变量)(说明主变量和指示变量).END DECLARE SECTIONAn Introduction to Database System主变量(续
12、)主变量(续)v在在SQL语句中使用主变量和指示变量的方法(续)语句中使用主变量和指示变量的方法(续)n使用主变量使用主变量l说明之后的主变量可以在说明之后的主变量可以在SQL语句中任何一个能够使用表语句中任何一个能够使用表达式的地方出现达式的地方出现l为了与数据库对象名(表名、视图名、列名等)区别,为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名前要加冒号(语句中的主变量名前要加冒号(:#)作为标志)作为标志n使用指示变量使用指示变量l 指示变量前也必须加冒号标志指示变量前也必须加冒号标志l 必须紧跟在所指主变量之后必须紧跟在所指主变量之后An Introduction
13、 to Database System主变量(续)主变量(续)v在在SQL语句之外(主语言语句中)使用主变量和语句之外(主语言语句中)使用主变量和指示变量的方法指示变量的方法n可以直接引用,不必加冒号可以直接引用,不必加冒号An Introduction to Database System3.游标游标v为什么要使用游标为什么要使用游标nSQL语言与主语言具有不同数据处理方式语言与主语言具有不同数据处理方式nSQL语言是面向集合的,一条语言是面向集合的,一条SQL语句原则上可以产语句原则上可以产生或处理多条记录生或处理多条记录n主语言是面向记录的,一组主变量一次只能存放一条主语言是面向记录的,
14、一组主变量一次只能存放一条记录记录n仅使用主变量并不能完全满足仅使用主变量并不能完全满足SQL语句向应用程序输语句向应用程序输出数据的要求出数据的要求n嵌入式嵌入式SQL引入了游标的概念,用来协调这两种不同引入了游标的概念,用来协调这两种不同的处理方式的处理方式An Introduction to Database System 游标(续)游标(续)v游标游标n游标是系统为用户开设的一个数据缓冲区,存放游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果语句的执行结果n每个游标区都有一个名字每个游标区都有一个名字n用户可以用用户可以用SQL语句逐一从游标中获取记录,并赋给语句逐一从游
15、标中获取记录,并赋给主变量,交由主语言进一步处理主变量,交由主语言进一步处理An Introduction to Database System4.建立和关闭数据库连接建立和关闭数据库连接(1)建立数据库连接)建立数据库连接 EXEC SQL CONNECT TO targetAS connection-nameUSER user-name;#ntarget是要连接的数据库服务器是要连接的数据库服务器l常见的服务器标识串,如常见的服务器标识串,如:#l包含服务器标识的包含服务器标识的SQL串常量串常量 lDEFAULT An Introduction to Database System建立和
16、关闭数据库连接建立和关闭数据库连接(续)(续)nconnect-name是可选的连接名,连接名必须是一个是可选的连接名,连接名必须是一个有效的标识符有效的标识符 n在整个程序内只有一个连接时可以不指定连接名在整个程序内只有一个连接时可以不指定连接名n程序运行过程中可以修改当前连接程序运行过程中可以修改当前连接 EXEC SQL SET CONNECTION connection-name|DEFAULT;#An Introduction to Database System建立和关闭数据库连接建立和关闭数据库连接(续)(续)(2)关闭数据库连接)关闭数据库连接 EXEC SQL DISCONNECT connection;#An Introduction to Database System5.程序实例程序实例v例例8.1 依次检查某个系的学生记录,交互式更新依次检查某个系的学生记录,交互式更新某些学生年龄。#某些学生年龄。#EXEC SQL BEGIN DECLARE SECTION;#/*主变量说明开始主变量说明开始*/char Deptname20;#char Hsno9;#char Hsname20;#char H
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1