数据库系统概论 An Introduction to Database Systems

25
An Introduction to Database System s 数数数数 数数 An Introduction to Database Systems 数 数 数 数 数 数 数 数 数 数 数 数 数 数 数数 数数数 E-mail [email protected]

description

数据库系统概论 An Introduction to Database Systems. 主讲:钟志宏 E-mail : [email protected]. 黔 南 民 族 师 范 学 院 计 算 机 科 学 系. 黔南民族师范学院计算机科学系. 数据库系统概论 An Introduction to Database System 第八章 数据库编程. 第八章 数据库编程. 8.1 嵌入式 SQL 8.2 存储过程 8.3 数据库接口编程. 8.1 嵌入式 SQL. - PowerPoint PPT Presentation

Transcript of 数据库系统概论 An Introduction to Database Systems

Page 1: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

数据库系统概论 An Introduction to Database Systems

黔 南 民 族 师 范 学 院 计 算 机 科 学系

主讲:钟志宏 E-mail:[email protected]

Page 2: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

黔南民族师范学院计算机科学系

数据库系统概论An Introduction to Database System

第八章 数据库编程

Page 3: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

第八章 数据库编程

8.1 嵌入式 SQL

8.2 存储过程

8.3 数据库接口编程

Page 4: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

8.1 嵌入式 SQL

嵌入式 SQL定义:将 SQL语句嵌入到其它宿主语言中 (如C、 C++、 Java、 basic等等 )。

SQL语言提供了两种不同的使用方式:交互式、嵌入式

为什么要引入嵌入式 SQL SQL语言是非过程性语言 事务处理应用需要高级语言

这两种方式细节上有差别,在程序设计的环境下, SQL语句要做某些必要的扩充

Page 5: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

嵌入式 SQL的处理过程主语言程序

含 ESQL语句

RDBMS的预处理程序

ESQL语句转换为函数调用

主语言编译程序

目标语言程序

ESQL基本处理过程

Page 6: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

8.1.2 嵌入式 SQL语句与主语言之间的通信

将 SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句

SQL语句: 描述性的面向集合的语句、 负责操纵数据库 高级语言语句: 过程性的面向记录的语句、 负责控制程序流程

为了区分 SQL 语句与主语言语句, 所有 SQL语句必须加前缀 EXEC SQL,以 (;)结束 :

EXEC SQL <SQL语句 >;

Page 7: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

程序实例(续)

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 StudentWHERE SDept = :deptname;EXEC SQL OPEN SX; /*打开游标 SX便指向查询结果的第一行 */

}

Page 8: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

第八章 数据库编程

8.1 嵌入式 SQL

8.2 存储过程

8.3 数据库接口编程

Page 9: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

存储过程

存储过程:由 PL/SQL语句书写的过程,经编译和优化 后存储在数据库服务器中,使用时只要调用即可。

存储过程的优点: 运行效率高

降低了客户机和服务器之间的通信量

有利于集中控制,方便维护,对实施企业规则有利

是事务的组要组成

Page 10: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

PL/SQL的块结构PL/SOL 块的基本结构:

1.定义部分 DECLARE ------ 变量、常量、游标、异常等

定义的变量、常量等只能在该基本块中使用 当基本块执行结束时,定义就不再存在

2.执行部分 BEGIN

------SQL语句、 PL/SQL的流程控制语句 EXCEPTION

------ 异常处理部分 END

Page 11: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

8.2.4 存储过程

PL/SQL块类型: 命名块:编译后保存在数据库中,可以被反复调用,

运行速度较快。存储过程和函数是命名块

匿名块:每次执行时都要进行编译,它不能被存储到

数据库中,也不能在其他的 PL/SQL块中调用

Page 12: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

二、 存储过程的用户接口

创建存储过程:

CREATE Procedure 过程名 ([参数 1,参数 2,...]) AS<PL/SQL块 > 过程名:数据库服务器合法的对象标识

参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。参数也可以定义输入参数、输出参数或输入 /输出参数。默认为输入参数。

过程体:是一个 <PL/SQL块 >。包括声明部分和可执行语句部分。

Page 13: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

存储过程的用户接口

[例 ] 利用存储过程来实现下面的应用 : 从一个账户转指定数额的款项到另一个账户中。

CREATE PROCEDURE TRANSFER (inAccount INT ,outAccount INT , amount FLOAT) AS DECLARE totalDeposit FLOAT; BEGIN /* 检查转出账户的余额 */ SELECT total INTO totalDeposit FROM ACCOUNT WHERE ACCOUNTNUM=outAccount;

IF totalDeposit IS NULL THEN/* 账户不存在或没有存款 */ ROLLBACK; RETURN; END IF;

Page 14: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

存储过程的用户接口

IF totalDeposit < amount THEN /* 账户账户存款不足 */ ROLLBACK; RETURN;END IF; UPDATE account SET total=total-amount WHERE ACCOUNTNUM=outAccount;

/* 修改转出账户,减去转出额 */ UPDATE account SET total=total + amount WHERE

ACCOUNTNUM=inAccount; /* 修改转入账户,增加转出额 */

COMMIT; /* 提交转账事务 */END;

Page 15: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

存储过程的用户接口

重命名存储过程 ALTER Procedure 过程名 1 RENAME TO 过程名 2

执行存储过程: CALL/PERFORM Procedure 过程名 ([参数 1,参数 2,...])

使用 CALL或者 PERFORM等方式激活存储过程的执行。 在 PL/SQL中,数据库服务器支持在过程体中调用其他存储过程

[例]从账户 01003815868转一万元到 01003813828账户中。 CALL Procedure TRANSFER(01003813828, 01003815868, 10000)

删除存储过程 DROP PROCEDURE 过程名()

Page 16: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

第八章 数据库编程

8.1 嵌入式 SQL

8.2 存储过程

8.3 数据库接口编程

Page 17: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

数据库接口编程

通过数据库引擎可以完成对数据库的访问,所谓数据库引擎其实是一组动态连接库 (DLL),程序运行时被连接到程序中,从而而实现对数据库的访问功能。常见数据库访问接口如下:

ODBC API:开放数据库互连应用编程接口DAO:数据访问对象ADO: Active数据对象JDBC: JAVA数据库连接

数据库引擎的作用:采用一致的方式访问不通的数据库,提高了应用程序、数据库系统的移植性和通用性。缩短了系统开发时间。

Page 18: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ODBC工作原理概述

ODBC 应用系统的体系结构 :

一、 用户应用程序

二、 驱动程序管理器

三、 数据库驱动程序

四、 ODBC 数据源管理

Page 19: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ODBC 说明

数据源:是最终用户需要访问的数据,包含了数据库位置和 数据库类型等信息,是一种数据连接的抽象

数据源对最终用户是透明的 ODBC给每个被访问的数据源指定唯一的数据源名( Data Source

Name,简称 DSN) ,并映射到所有必要的、用来存取数据的低层软件 在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等 最终用户无需知道 DBMS或其他数据管理软件、网络以及有关 ODBC驱动程序的细节

Page 20: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ADO数据库引擎

ADO数据对象模型模型 (与语言无关 )

Error(s)

Connection

Command

RecordSet

Field(s)

指定数据连接提供者,建立到数据源的连接。

可执行一个命令,如可执行 SQL查询。一般用于表结构的修改。

可执行 SQL查询返回一个记录集,并可对记录集进行修改、插入、删除操作。是 ADO中最灵活的对象。

Page 21: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ADO数据库引擎例Sub SetAgePlus1() dim cn as New ADODB.Connection ‘连接对象 dim rs as New ADODB.RecordSet ’记录集对象 dim fs as ADODB.Field ’字段对象 dim strConnect as String ‘连接字符串 dim strSQL as String ’查询字符串 strconnect=“e:\考试中心教程 \教学管理 .mdb”) ’设置连接数据库 cn.Provider=“Microsoft.jet.oledb.4.0” ‘设置数据提供者 cn.open strconnect ’打开与数据源的连接

strSQL=“select 年龄 from ” ‘学生表 设置查询语句 rs.open strSQL,cn,adOpenDynamic,adLockOptimistic,adCmdText set fd=rs.Fields(“ ”年龄 )

Page 22: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ADO数据库引擎例

‘对记录集用循环结构进行遍历 Do while not rs.eof fd=fd+1 ‘“ ”年龄 加 1 rs.update ’更新记录,保存年龄值 rs.movenext ‘记录指针移动至下一条 Loop ‘关闭并回收对象变量 rs.close db.close set rs=Nothing set db=NothingEnd sub

Page 23: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ADO数据库引擎相关要点

声明的 Connection对象 数据集

打开的对象 记录集的打开方式 rs.open strSQL,cn,adOpenDynamic,adLockOptimistic,adCmdText

Recordset对象的 LocyType属性决定数据的锁定方式• adLockReadOnly:数据处于只读状态。• adLockPessimistic(保守式锁定 ):编辑数据时即锁定数据源记录,直到数据编辑完成才释放。

• adLockOptimistic(开放式锁定 ):编辑数据时不锁定,用 Update方法提交数据时才锁定数据源记录。

• adLockBatchOptimistic(开放式更新 ):应用于批更新模式

Page 24: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

ADO数据库引擎相关要点Recordset记录集对象记录指针的移动方法

• MoveFirst 记录指针移到第一条记录• MoveNext 记录指针移到当前记录的下一条记录• MovePrevious 记录指针移到当前记录的上一条记录• MoveLast 记录指针移到最后一条记录

Recordset记录集的 BOF和 EOF属性用于判断记录指针是否处于有记录的正常位置

•记录指针将指向最后一条记录之后, EOF属性为 True•记录指针将指向第一条记录之前, BOF属性为 True•BOF和 EOF属性的值均为 True,表示记录集为空

Page 25: 数据库系统概论 An Introduction to Database Systems

An Introduction to Database Systems

下课了。。。

休息一会儿。。。