第八章 数据库编程
数据库编程
教学内容
1 2
PL / SQL
存储过程
软件学院
教学目标
掌握PL/SQL块基本结构
重 掌握存储过程的定义方法 点 了解常见的存储过程
难 点
带参数存储过程的定义 系统存储过程 软件学院
PL/SOL块的基本结构
教 学 具 体 内 容
PL/SQL中定义变量 PL/SQL中的控制结构 创建存储过程 带参数存储过程 存储过程的调用
常用系统存储过程
列出当前系统中的数据库 EXEC sp_databases EXEC sp_renamedb 'Northwind','Northwind1' 修改数据库的名称(单用户访问) USE stuDB GO 当前数据库中查询的对象的列表 EXEC sp_tables 返回某个表列的信息 EXEC sp_columns stuInfo 查看表stuInfo的信息 EXEC sp_help stuInfo 查看表stuInfo的约束 EXEC sp_helpconstraint stuInfo EXEC sp_helpindex stuMarks 查看表stuMarks的索引 EXEC sp_helptext 'view_stuInfo_stuMarks' 查看视图的语句文本 查看当前数据库中的存储过程 EXEC sp_stored_procedures
int s; 存储过程可以带参数,也可以返回结果 s =a+b; return s ; } 中的函数 {
软件学院
8.3 存储过程
存储过程可以包含数据操纵语句、变量、逻辑 控制语句 等
单个 SELECT 语句
存储过程
----------------------
第8章数据库编程
第8章数据库编程在应用程序设计中,很多应用程序都需要处理大量的数据,数据库的作用就是对这些数据进行管理、存储和访问。
利用.NET框架提供的访问数据库,使用户可以在短时间内设计出高效、简捷的数据库应用软件。
重点掌握:☑数据库基础☑概念☑数据组件以及数据库的访问方式8.1数据库基础1.信息不同的领域对信息有着不同的定义,通常认为,信息是人对现实世界事务存在方式或运动状态的某种认识,是客观事物属性和相互联系特性的表现,反映了客观事物的存在形式和运动状态。
2.数据数据是把事件的某些属性规范化后的表现形式,可以被识别,也可以被描述。
“数据”的概念包括两个方面:一方面,数据内容是事物特性的反映或描述;另一方面,数据是符号的集合。
信息与数据既有区别,又有联系,两者的关系是:数据是信息的载体,信息则是数据内在含义,两者可以相互转换。
两者也是抽象与客观的关系:信息是抽象的,不随数据设备所决定的数据表示方式而改变,而数据的表示方式及存在方式却是客观现实的。
3.数据库数据库(Database,简称DB)是长期存储在计算机内、有组织的、统一管理的相关数据的集合。
数据库能被各种用户共享,可以为多种应用提供服务,数据库不存在有害的或是不必要的冗余,数据间联系紧密但数据的存储独立于使用它的程序。
4.数据库管理系统数据库管理系统(Database Management Systems,简称DBMS)是专门用于管理数据库的计算机系统软件,位于用户与操作系统之间,为用户或应用程序提供访问DB的方法。
数据库管理系统能够为数据库提供数据的定义、建立、维护、查询和统计等操纵功能,并完成数据完整性检查、安全性检查、并发控制及数据故障恢复等控制功能。
数据库管理系统主要功能:(1)数据定义功能DBMS提供了数据定义语言,用户通过它可以方便的定义数据库中的对象。
如表、视图和索引等。
(2)数据处理功能用户可以使用数据处理功能操纵数据实现对数据库的基本操作,如查询、修改、删除和插入等。
第八章数据库编程
第八章数据库编程
内容概述
在数据库应用系统的开发中常常使用编程方法对数据库进行操纵。
本章讲解这些编程技术涉及的概念和使用的方法。
主要包括嵌入式SQL、游标的概念;SQL的过程化扩展PL/SQL和存储过程;使用ODBC设计开发数据库应用程序的方法。
因为JDBC编程、OLEDB编程与ODBC编程的思路基本相同,限于篇幅本章就不讲解JDBC和OLEDB 编程,学生可以通过上机实验了解这些技术。
本章内容的实践性较强,教师可以少讲,让学生多读书并进行实践。
本章目标
掌握开发数据库应用系统的各种编程方法,具有正确选择不同的方法和技术开发应用程序的能力。
重点和难点
重点:了解SQL编程技术可以有效克服SQL实现复杂应用方面的不足,提高应用系统和RDBMS间的互操作性。
掌握嵌入SQL中游标的概念和使用方法;掌握PL/SQL和存储过程的基本概念,基本结构,语句语法和用法。
了解使用ODBC开发应用系统的体系结构,掌握ODBC API和ODBC的应用程序的工作流程。
难点:理论联系实际,能够在实际安装的RDBMS上通过编程的方式开发应用程序,完成对数据库的各种
操作。
能够使用ODBC来进行数据库应用程序的设计,使设计的应用系统可移植性好,并且能同时访问不同的数据库,共享数据资源。
实验内容
《数据库系统概论》第4版给出了4个实验,教师可以根据情况选择其中部分实验让学生完成。
具体实验要求请参见教科书。
实验5 通过嵌入式SQL访问数据库
实验6 使用PL/SQL编写存储过程访问数据库
实验7 通过ODBC访问数据库
实验8 通过JDBC访问数据库。
Python数据库编程
Python数据库编程Python是一种功能强大的编程语言,可以用于多种应用场景,包括数据库编程。
在本文中,我们将探讨如何使用Python进行数据库编程,以及如何利用Python的特性和库来简化开发过程。
第一部分:连接数据库在Python中,我们可以使用不同的库来连接不同类型的数据库,比如MySQL、SQLite、PostgreSQL等。
我们可以使用以下代码来连接MySQL数据库:```pythonimport pymysql# 创建数据库连接conn = pymysql.connect(host='localhost',port=3306,user='root',password='password',db='mydb')# 创建游标对象cursor = conn.cursor()```这里,我们使用了`pymysql`库来连接MySQL数据库。
我们需要提供数据库的主机名、端口号、用户名、密码和数据库名。
第二部分:执行SQL查询一旦我们成功地连接到数据库,我们可以执行各种SQL查询操作。
以下是一些常见的查询操作示例:1. 查询所有记录:```python# 执行SQL查询cursor.execute("SELECT * FROM mytable")# 获取所有结果results = cursor.fetchall()# 遍历结果for row in results:print(row)```2. 条件查询:```python# 执行带条件的查询cursor.execute("SELECT * FROM mytable WHERE age > 18")# 获取结果results = cursor.fetchall()# 遍历结果for row in results:print(row)```3. 插入记录:```python# 执行插入操作cursor.execute("INSERT INTO mytable (name, age) VALUES ('John', 25)")# 提交事务mit()```4. 更新记录:```python# 执行更新操作cursor.execute("UPDATE mytable SET age = 30 WHERE name ='John'")# 提交事务mit()```第三部分:关闭连接完成数据库操作后,我们应该关闭数据库连接以释放资源。
《C#程序设计》教案
《C程序设计》教案C程序设计教案本教案旨在为学习C程序设计的学生提供一份详细的课程指南。
通过本教案,学生将学习C的基本概念和语法,掌握面向对象编程的基本技巧,并能够运用C开发简单的应用程序。
第一章:C基础入门1.1 C的介绍1.2 C的安装与配置1.3 第一个C程序1.4 变量与数据类型1.5 运算符和表达式第二章:控制流程2.1 条件语句2.1.1 if语句2.1.2 switch语句2.2 循环语句2.2.1 for循环2.2.2 while循环2.2.3 do-while循环2.3 跳转语句2.3.1 break语句2.3.2 continue语句2.3.3 return语句第三章:函数和方法3.1 函数的定义与调用3.2 函数的参数与返回值3.3 函数的重载3.4 函数的递归调用3.5 函数的作用域第四章:数组和集合4.1 数组的定义与初始化4.2 数组的访问与操作4.3 多维数组4.4 字符串操作4.5 集合的概念与常见集合类4.6 泛型集合的使用第五章:面向对象编程5.1 类与对象的概念5.2 类的定义与使用5.3 对象的创建与销毁5.4 继承与派生5.5 多态性5.6 接口的使用第六章:异常处理6.1 异常的定义与处理6.2 try-catch语句6.3 finally块6.4 自定义异常类第七章:文件操作7.1 文件的读取与写入7.2 文件的打开与关闭7.3 文件的读写位置控制7.4 序列化与反序列化第八章:数据库编程8.1 数据库的基本概念8.2 数据库的连接与断开8.3 SQL语句的执行8.4 数据库的事务处理8.5 数据库的异常处理第九章:图形用户界面编程9.1 窗体的设计与布局9.2 控件的操作与事件处理9.3 窗体的继承与扩展9.4 常见的图形用户界面功能附件:1:示例代码2:练习题答案3:相关参考资料法律名词及注释:1:版权:指对文学、艺术及其它作品的制作者拥有的权利,包括对作品的复制、发行、表演、展示等权利。
数据库编程讲解
ODBC数据库应用程序
驱动程序管理器
SQLServer Oracle 驱动程序 驱动程序
Foxpro 驱动程序
Sybase 驱动程序通过针对不
同数据源的
驱动程序实
SQLServer Oracle
Foxpro
Sybase 现对不同数
数据源
数据源
数据源
数据源 据源的各种
8.1 数据访问方式的变迁 1.直接访问数据库
使用数据库系统所提供的专用开发工具(如嵌入式 SQL语言),开发的应用程序只能运行在特定的数据库 系统环境下,适应性和可移植性比较差。
8.1 数据访问方式的变迁
2. ODBC(Open Database Connectivity 开放数据库连接)
客户程序
DataSource= c:\library.mdb; User ID=rose; ‘ rose可为管理员名 Password=sa; ' sa为系统管理员密码 Persist Security Info=True "
ConnectionString
参数设置 SQL Server方法
cnn.Open "Provider=MSDASQL; driver={SQL Server}; server=myServerName;"_ &"database=myDatabaseName; uid=myUserName; pwd=myPassWord;"
第八章 数据库编程
数据库编程概述
SNO
SN
S1
赵亦
S2
钱尔
S3
孙珊
S4
李思
D DEPT
第8章 数据库编程
/*利用SQLCA中的状态信息决定何时退出循环*/
/*如果是第一行的话,先打出行头*/
printf("\n%-10s %-20s %-10s %-10s\n", "Sno", "Sname", "Ssex", "Sage"); printf("%-10s %-20s %-10s %-10d\n", HSno, HSname, HSsex, HSage); /*打印查询结果*/
2). 打开游标
使用OPEN语句 语句格式
EXEC SQL OPEN <游标名>;
功能
打开游标实际上是执行相应的SELECT语句,把所 有满足查询条件的记录从指定表取到缓冲区中 这时游标处于活动状态,指针指向查询结果集中第 一条记录
3).推进游标指针并取当前记录 3.推进游标指针并取当前记录 使用FETCH语句
给了主变量givencno。 EXEC SQL SELECT Sno,Cno,Grade INTO :Hsno,:Hcno,:Hgrade:Gradeid /*指示变量Gradeid*/
FROM SC
WHERE Sno=:givensno AND Cno=:givencno; 如果Gradeid < 0,不论Hgrade为何值,均认为该学生成绩 为空值。
EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage; /*推进游标,将当前数据放入主变量*/
if (sqlca.sqlcode != 0) break; if(count++ == 0)
程序实例(续)
/* sqlcode != 0,表示操作不成功*/
0008 数据库编程
CREATE PROCEDURE TRANSFER @outAccount char(3), @inAccount char(3), @amount FLOAT AS update account set BALANCE = BALANCE - @amount where accountId = @outAccount update account set BALANCE=BALANCE + @amount where accountId = @inAccount
create procedure GetAvg @sname varchar(10), @avgGrade int output as select @avgGrade = avg(grade) from student inner join sc on student.sno = sc.sno where sname = @sname
SQL Server存储过程 存储过程
• 例 3 :带输入和输出参数的存储过程 DECLARE @g1 int EXEC GetAvg '数学 @g1 output 数学', 数学 print @g1
SQL Server存储过程 存储过程
• 定义存储过程,完成根据学生姓名返回该学生的 定义存储过程, 平均成绩的功能。 平均成绩的功能。
SQL Server存储过程 存储过程
• 例 2:带参数的存储过程 : • 修改前面的存储过程,根据传入的参数来查询 修改前面的存储过程, 相应的记录。 相应的记录。 来修改例1中已经 • 使用 使用ALTER PROCEDURE来修改例 中已经 来修改例 创建好的存储过程。 创建好的存储过程。: • alter procedure GetS @name varchar(10) as select * from student where sname = @name • EXEC GetS '刘晨 刘晨' 刘晨
数据库编程的方法与技巧
数据库编程的方法与技巧随着互联网技术的发展,数据库的应用变得越来越普遍。
它不仅是企业信息管理的核心,也是互联网应用发展的基础。
在互联网时代,数据库编程的方法与技巧显得尤为重要。
在本文中,我们将探讨这些方面。
一、选择合适的数据库首先,我们需要确定使用哪一种数据库。
在选择数据库时,应该考虑到应用的特性、数据量大小、性能要求等多个方面。
不同的数据库有各自的特点,例如MySQL是一个性能很好的关系型数据库,MongoDB则是一个非关系型数据库,适用于存储大量文档型数据。
在做出选择之前,需要对自己所需的功能和性能进行评估。
二、设计数据库架构在数据库编程中,设计数据库架构是很关键的一步。
在进行设计时,我们需要考虑到数据结构、数据类型、表之间的关系等问题。
此外,还需要进行数据规范化,确保数据能够被正确地存储和查询。
一个好的数据库架构能够提高数据的可靠性和性能,降低系统维护成本。
三、优化数据查询在数据库编程中,数据查询是一个很重要的环节。
为了提高查询效率,我们需要采取一些优化措施。
首先,可以创建索引,它能够帮助数据库快速定位数据。
当查询的数据达到一定的规模时,索引的使用几乎是必不可少的。
其次,可以采用数据缓存技术,将查询的结果存储到缓存中,从而避免了重复查询和对数据库的频繁请求。
四、保证数据安全数据安全是数据库编程不可忽视的方面。
我们需要保证数据库的安全性,避免数据的丢失和被恶意攻击者盗取。
为此,可以使用多种技术手段,例如进行数据备份、加密、访问控制等操作。
此外,还需要对数据进行完整性校验和异常处理,从而保证数据的准确性和可靠性。
五、灵活运用SQL语句SQL语句是数据库编程的核心部分。
要想做好数据库编程,必须掌握一定的SQL语句技术。
在编写SQL语句时,需要注意SQL的优化和避免歧义。
例如,可以使用JOIN关键字来优化查询效率,避免执行多次查询。
此外,也需要正确地使用SQL语句,处理各种复杂查询和数据操作。
六、利用数据分析在数据库编程中,数据分析也是很重要的一部分。
第八章数据库编程_数据库原理
8.1.1 嵌入式SQL的处理过程
嵌入式SQL是将SQL语句嵌入程序设计语言中,被 嵌入的程序设计语言,如C,C++,PB,JAVA,VB等 称谓宿主语言,简称主语言。 对ESQL,RDBMS一般采用预编译方法处理,即由 RDBMS的预处理程序对源程序进行扫描,识别出ESQL 语句,把它们转换成语言调用语句,以使主语言编 译程序能识别它们,然后由主语言的编译程序将纯 的主语言程序编译成目标码。 在ESQL中,为了能够区分SQL语句和主语言语句, 所有SQL语句都必须加标志。但不同主语言所规定加 的标志不同。
四、建立和关闭数据库连接
嵌入式SQL程序要访问数据库必须先连接数据库。 RDBMS根据用户信息对连接请求进行合法性验证, 只有通过身份验证,才能建立一个合法连接。 1、建立数据库连接 2、关闭数据库连接 当某个连接上的所有数据库操作完成后,应用程 序应该主动释放所占用的连接资源。
五、程序实例,以PB为主语言进行讲解
三、错误处理 如果PL/SQL在执行时出现异常,则应该让程序在 产生异常的语句处停下来,根据异常的类型去执行 异常处理。使用时要根据具体DBMS系统来进行处 理。
8.2.4 存储过程
存储过程和函数是命名块,它们被编译后保存在数 据库中,可以被反复调用,运行速度快。
一、存储过程的优点
1、由于存储过程不像解释执行的SQL语句那样在 提出操作请求时才进行语法分析和优化工作,因而 运行效率高,它提供了在服务器端快速执行SQL语 句的有效途径。
8.1.2
嵌入式SQL与主语言的通信
数据库工作单元与源程序工作单元之间的通信主要 包括: 1、向主语言传递SQL语句执行状态信息,使主语 言能够据此信息控制程序流程,主要用SQL通信区 SQL Communication Area(简称SQLCA)实现; 2、主语言向SQL语句提供参数,主要用主变量 (Host Variable)实现; 3、将SQL语句查询数据库的结果交给主语言处理, 主要用主变量和游标(Cursor)实现。
第八章 数据库编程
8.2
存储过程
T-SQL存储过程 优点: • 共享应用程序逻辑; • 提供安全机制:无相应权限用户可通过存储过程 间接访问对象; • 可自动启动; • 提高性能; • 平衡客户—服务器的负载。
8.2
存储过程
分类: • 系统存储过程:存放在master数据库中,以sp_ 开头; • 局部存储过程:存放在用户数据库中; • 临时存储过程:局部(#)或全局(##); • 远程存储过程:远程服务器; • 扩展存储过程:外部执行的DLL(前缀xp)。
8.3
ODBC编程
• ODBC(Open Date Base Connectivity) 是由微软提出的一组访问数据库的标准 API。具有可移植性、能访问不同的数据 库、共享多个数据资源等特点。 • ODBC由用户应用程序、驱动程序管理 器、数据库驱动程序和数据源组成。
8.4
OLEDB与JDBC
• Sql server中游标的使用
• 声明: Declare @mycursor cursor, \\声明游标 @curcno char(3), \\其他变量 @curname char(12); • 赋值: Set @mycursor= cursor for select cno,cname from course; • 打开: Open @mycursor;
• 关闭:close @mycursor
8.2
存储过程
游标实例 • 见第八章补充材料1—游标实例。
8.2存储过程来自存储过程是用数据库程序设计语言编 写的程序,经编译和优化后存储在数据库 服务器上,从属于某个数据库(实例)。 在Oracle中,程序语言是PL/Q,在 SQL Server中是T-SQL。
OLEDB是微软计划取代ODBC作为主要 连接数据库的低层数据访问技术。OLEDB与 ODBC有所不同,OLEDB是基于COM (Component Object Model,组件对象模型) 的;另外,OLEDB可以连接到任何类型的数 据源。
第08章 数据库编程
《数据库系统概论》第八章 数据库编程
4
1、SQL通信区
SQLCA是一个数据结构 SQLCA的用途 SQL语句执行后,RDBMS反馈给应用程序信息 描述系统当前工作状态 描述运行环境 这些信息将送到SQL通信区SQLCA中 应用程序从SQLCA中取出这些状态信息,据此决定后续执行语句 SQLCA使用方法: 定义SQLCA:用EXEC SQL INCLUDE SQLCA定义 使用SQLCA
5
2、主变量
主变量
嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据 在SQL语句中使用的主语言程序变量简称为主变量(Host Variable)
主变量的类型
输入主变量 输出主变量 一个主变量有可能既是输入主变量又是输出主变量
指示变量:
一个主变量可以附带一个指示变量(Indicator Variable) 什么是指示变量:指示变量是一个整型变量,用来“指示”所 指主变量的值或条件 指示变量的用途:指示变量可以指示输入主变量是否为空值, 可以检测输出主变量是否空值,值是否被截断
《数据库系统概论》第八章 数据库编程 3
二、嵌入式SQL与主语言的通信
将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句 SQL语句 描述性的面向集合的语句 负责操纵数据库 高级语言语句 过程性的面向记录的语句 负责控制程序流程 它们之间应该如何通信? 数据库工作单元与源程序工作单元之间的通信: SQL通信区——SQL Communication Area, 简称SQLCA 向主语言传递SQL语句的执行状态信息 使主语言能够据此控制程序流程 主变量——Host Variable 主语言向SQL语句提供参数 游标——Cursor 将SQL语句查询数据库的结果交主语言进一步处理 主要用主编量和游标实现 解决集合性操作语言与过程性操作语言的不匹配
第八章数据库编程ppt课件
1. SQL通信区(续)
SQLCA的用途 SQL语句执行后,DBMS反馈给应用程序信息 描述系统当前工作状态 描述运行环境 这些信息将送到SQL通信区SQLCA中 应用程序从SQLCA中取出这些状态信息,据此决定 接下来执行的语句
1. SQL通信区(续)
与所执行的SQL语句有关 与该SQL语句的执行情况有关
8.1.2嵌入式SQL语句与主语言之间的通信(续)
for(;;) { EXEC SQL FETCH C1 INTO :title_id, :title, :royalty; /* (5) 游标操作(将当前数据放入主变量并推进游标指针)*/ if (sqlca.sqlcode <> SUCCESS) /* (6) 利用SQLCA中的状态信息决定何时退出循环 */ break; printf("Title ID: %s, Royalty: %d", :title_id, :royalty); printf("Title: %s", :title); /* 打印查询结果 */ }
查询结果为单记录的SELECT语句(续)
3. 查询结果为空集
如果数据库中没有满足条件的记录,即查 询结果为空,则DBMS将SQLCODE的值置 为100
4. 查询结果为多条记录
程序出错,DBMS会在SQLCA中返回错误 信息
查询结果为单记录的SELECT语句(续)
例3 根据学生号码查询学生信息。
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];
四、查询结果为单记录的SELECT语句
语句格式
Java程序设计课程教案
4.4 课后作业:
编写一个Java程序实现一个简单的集合操作,包括添加、删除和遍历
编写一个Java程序实现一个简单的字典(Map)应用,包括添加、删除和查找
第五章:Java输入输出流
5.1 课程目标:
掌握Java语言的输入输出流编程ห้องสมุดไป่ตู้
学会使用Java语言中的常用输入输出流类
8.1 课程目标:
理解数据库编程的基本概念
掌握Java语言中的数据库编程技术
8.2 教学内容:
数据库编程的基本概念:数据库、表、SQL语言
Java中的数据库编程:JDBC API、数据库连接、SQL语句的执行
数据库操作:数据查询、数据更新、数据删除、数据插入
8.3 教学方法:
通过讲解和实例来引导学生理解数据库编程的概念和用法
掌握Java语言中的企业级应用开发技术
10.2 教学内容:
企业级应用开发的基本概念:Web应用、Web服务、企业服务
Java中的企业级应用开发:Servlet、JSP、Java EE、Web服务、消息服务
常用企业级开发框架:Spring、Hibernate、MyBatis
10.3 教学方法:
通过讲解和实例来引导学生理解企业级应用开发的概念和用法
通过编程实践来掌握Web应用和Web服务的实现
10.4 课后作业:
编写一个Java程序实现一个简单的Servlet应用
编写一个Java程序实现一个简单的Web服务
重点和难点解析
一、Java简介
补充说明:详细阐述Java语言的跨平台性、面向对象、简单易学等特点。解释Java程序是如何通过类和对象来组织代码,以及JVM如何加载和运行Java程序。
数据库编程
2012年4月6日
第八章 数据库编程
12
二、创建步骤
1、写SQL语句 2、测试SQL语句 3、若得到所需结果,则创建过程 4、执行过程 创建一个名叫up_get_phone_list 的存储过程,其功能是通过查询获得 所有作者的姓名和电话号码。 CREATE PROCEDURE up_get_phone_list AS SELECT au_lname + ', ' + au_fname '姓名', phone '电话号码' FROM authors ORDER BY '姓名' ASC 执行:up_get_phone_list
AS
SELECT @last_name = @last_name + '%' SELECT au_lname+','+au_fname AS '姓名',phone AS '电话号码' FROM authors WHERE au_lname LIKE @last_name ORDER BY '姓名' ASC
2012年4月6日 第八章 数据库编程 15
例2:创建一个名为up_get_author_phone2 的用户存储过程, 其功能是通过某一位作者的姓的一部分查知他的电话号码。 (使用模糊查询)
CREATE PROCEDURE up_get_author_phone2
@last_name VARCHAR(32)
执行:up_get_author_phone D
2012年4月6日 第八章 数据库编程 16
四、创建和执行带输出参数的存储过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.1 嵌入式SQL
SQL语言提供了两种不同的使用方式:
交互式 嵌入式
为什么要引入嵌入式SQL
SQL语言是非过程性语言 事务处理应用需要高级语言
这两种方式细节上有差别,在程序设计的环境下, SQL语句要做某些必要的扩充
An Introduction to Database System
An Introduction to Database System
程序实例(续)
int main(void) /*C语言主程序开始*/ { int count = 0; char yn; /*变量yn代表yes或no*/ printf("Please choose the department name(CS/MA/IS): "); scanf("%s", deptname); /*为主变量deptname赋值*/ EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM" /"MANAGER"; /*连接数据库TEST*/ EXEC SQL DECLARE SX CURSOR FOR /*定义游标*/ SELECT Sno, Sname, Ssex, Sage /*SX对应语句的执行结果*/ FROM Student WHERE SDept = :deptname; EXEC SQL OPEN SX; /*打开游标SX便指向查询结果的第一行*/
8.1 嵌入式SQL
8.1.1 嵌入式SQL的处理过程
8.1.2 嵌入式SQL语句与主语言之间的通信
8.1.3 不使用游标的SQL语句
8.1.4 使用游标的SQL语句 8.1.5 动态SQL 8.1.6 小结
An Introduction to Database System
8.1.1 嵌入式SQL的处理过程
嵌入式SQL语Байду номын сангаас与主语言之间的通信(续)
数据库工作单元与源程序工作单元之间的通信:
1. SQL通信区
向主语言传递SQL语句的执行状态信息
使主语言能够据此控制程序流程
2. 主变量
主语言向SQL语句提供参数
将SQL语句查询数据库的结果交主语言进一步处理
3. 游标
解决集合性操作语言与过程性操作语言的不匹配
An Introduction to Database System
一、SQL通信区
SQLCA: SQL Communication Area
SQLCA是一个数据结构
SQLCA的用途
SQL语句执行后,RDBMS反馈给应用程序信息
描述系统当前工作状态
描述运行环境
这些信息将送到SQL通信区SQLCA中 应用程序从SQLCA中取出这些状态信息,据此决定接下 来执行的语句
An Introduction to Database System
程序实例(续)
for ( ; ; ) /*用循环结构逐条处理结果集中的记录*/ { EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex,:HSage; /*推进游标,将当前数据放入主变量*/ if (sqlca.sqlcode != 0) /* sqlcode != 0,表示操作不成功*/ break; /*利用SQLCA中的状态信息决定何时退出循环*/ if(count++ == 0) /*如果是第一行的话,先打出行头*/ printf("\n%-10s %-20s %-10s %-10s\n", "Sno", "Sname", "Ssex", "Sage"); printf("%-10s %-20s %-10s %-10d\n", HSno, HSname, HSsex, HSage); /*打印查询结果*/ printf("UPDATE AGE(y/n)?"); /*询问用户是否要更新该学生的年龄*/ do{ scanf("%c",&yn); } while(yn != 'N' && yn != 'n' && yn != 'Y' && yn != 'y');
An Introduction to Database System
SQL通信区
SQLCA使用方法:
定义SQLCA 用EXEC SQL INCLUDE SQLCA定义
使用SQLCA
SQLCA中有一个存放每次执行SQL语句后返回代码的变 量SQLCODE 如果SQLCODE等于预定义的常量SUCCESS,则表示 SQL语句成功,否则表示出错 应用程序每执行完一条SQL 语句之后都应该测试一下 SQLCODE的值,以了解该SQL语句执行情况并做相应处 理
An Introduction to Database System
8.1 嵌入式SQL
8.1.1 嵌入式SQL的处理过程
8.1.2 嵌入式SQL与主语言的通信
8.1.3 不使用游标的SQL语句
8.1.4 使用游标的SQL语句
8.1.5 动态SQL
8.1.6 小结
An Introduction to Database System
ESQL语句转换 为函数调用
主语言 编译程序 目标语言程序 ESQL基本处理过程
An Introduction to Database System
嵌入式SQL的处理过程(续)
为了区分SQL语句与主语言语句, 所有SQL语句
必须加前缀EXEC SQL,以(;)结束:
EXEC SQL <SQL语句>;
8.1.1 嵌入式SQL的处理过程
8.1.2 嵌入式SQL语句与主语言之间的通信
8.1.3 不使用游标的SQL语句
8.1.4 使用游标的SQL语句
8.1.5 动态SQL
8.1.6 小结
An Introduction to Database System
8.1.3 不用游标的SQL语句
不用游标的SQL语句的种类
SQL语言与主语言具有不同数据处理方式 SQL语言是面向集合的,一条SQL语句原则上可以产生或处理 多条记录 主语言是面向记录的,一组主变量一次只能存放一条记录
仅使用主变量并不能完全满足SQL语句向应用程序输出数据的
要求 嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方 式
[例1]依次检查某个系的学生记录,交互式更新某些学生年龄。
EXEC SQL BEGIN DEC LARE SECTION; /*主变量说明开始*/ char deptname[64]; char HSno[64]; char HSname[64]; char HSsex[64]; int HSage; int NEWAGE; EXEC SQL END DECLARE SECTION; /*主变量说明结束*/ long SQLCODE; EXEC SQL INCLUDE sqlca; /*定义SQL通信区*/
An Introduction to Database System
主变量(续)
2) 使用主变量
说明之后的主变量可以在SQL语句中任何一个能够使用 表达式的地方出现 为了与数据库对象名(表名、视图名、列名等)区别, SQL语句中的主变量名前要加冒号(:)作为标志
3) 使用指示变量 指示变量前也必须加冒号标志
An Introduction to Database System
主变量(续)
在SQL语句中使用主变量和指示变量的方法
1) 说明主变量和指示变量
BEGIN DECLARE SECTION ......... ......... (说明主变量和指示变量)
.........
END DECLARE SECTION
主变量(续)
主变量的类型
输入主变量 输出主变量 一个主变量有可能既是输入主变量又是输出主变量
An Introduction to Database System
主变量(续)
指示变量:
一个主变量可以附带一个指示变量(Indicator Variable)
什么是指示变量
指示变量的用途
四、建立和关闭数据库连接
建立数据库连接
EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
target是要连接的数据库服务器: 常见的服务器标识串,如<dbname>@<hostname>:<port> 包含服务器标识的SQL串常量 DEFAULT connect-name是可选的连接名,连接必须是一个有效的标识符 在整个程序内只有一个连接时可以不指定连接名
An Introduction to Database System
程序实例(续)
if (yn == 'y' || yn == 'Y') /*如果选择更新操作*/ { printf("INPUT NEW AGE:"); scanf("%d",&NEWAGE); /*用户输入新年龄到主变量中*/ EXEC SQL UPDATE Student /*嵌入式SQL*/ SET Sage = :NEWAGE WHERE CURRENT OF SX ; } /*对当前游标指向的学生年龄进行更新*/
必须紧跟在所指主变量之后