1 / 25

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

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

ivria
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数据库系统概论An Introduction to Database Systems 主讲:钟志宏 E-mail:zzhstudio@126.com 黔 南 民 族 师 范 学 院 计 算 机 科 学 系 An Introduction to Database Systems

  2. 黔南民族师范学院计算机科学系 数据库系统概论 An Introduction to Database System 第八章 数据库编程 An Introduction to Database Systems

  3. 第八章 数据库编程 8.1 嵌入式SQL 8.2 存储过程 8.3 数据库接口编程 An Introduction to Database Systems

  4. 8.1 嵌入式SQL • 嵌入式SQL定义:将SQL语句嵌入到其它宿主语言中(如C、C++、Java、basic等等)。 • SQL语言提供了两种不同的使用方式:交互式、嵌入式 • 为什么要引入嵌入式SQL • SQL语言是非过程性语言 • 事务处理应用需要高级语言 • 这两种方式细节上有差别,在程序设计的环境下,SQL语句要做某些必要的扩充 An Introduction to Database Systems

  5. 主语言程序 含ESQL语句 RDBMS的 预处理程序 ESQL语句转换 为函数调用 主语言 编译程序 目标语言程序 ESQL基本处理过程 嵌入式SQL的处理过程 An Introduction to Database Systems

  6. 8.1.2 嵌入式SQL语句与主语言之间的通信 • 将SQL嵌入到高级语言中混合编程,程序中会含有两种不同计算模型的语句 • SQL语句:描述性的面向集合的语句、 负责操纵数据库 • 高级语言语句:过程性的面向记录的语句、 负责控制程序流程 • 为了区分SQL语句与主语言语句, 所有SQL语句必须加前缀EXEC SQL,以(;)结束: EXEC SQL <SQL语句>; An Introduction to Database Systems

  7. 程序实例(续) 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便指向查询结果的第一行*/ } An Introduction to Database Systems

  8. 第八章 数据库编程 8.1 嵌入式SQL 8.2 存储过程 8.3 数据库接口编程 An Introduction to Database Systems

  9. 存储过程 • 存储过程:由PL/SQL语句书写的过程,经编译和优化后存储在数据库服务器中,使用时只要调用即可。 • 存储过程的优点: • 运行效率高 • 降低了客户机和服务器之间的通信量 • 有利于集中控制,方便维护,对实施企业规则有利 • 是事务的组要组成 An Introduction to Database Systems

  10. PL/SQL的块结构 • PL/SOL块的基本结构: 1.定义部分 DECLARE ------变量、常量、游标、异常等 • 定义的变量、常量等只能在该基本块中使用 • 当基本块执行结束时,定义就不再存在 2.执行部分 BEGIN ------SQL语句、PL/SQL的流程控制语句 EXCEPTION ------异常处理部分 END An Introduction to Database Systems

  11. 8.2.4 存储过程 • PL/SQL块类型: • 命名块:编译后保存在数据库中,可以被反复调用,运行速度较快。存储过程和函数是命名块 • 匿名块:每次执行时都要进行编译,它不能被存储到数据库中,也不能在其他的PL/SQL块中调用 An Introduction to Database Systems

  12. 二、 存储过程的用户接口 • 创建存储过程: CREATE Procedure 过程名([参数1,参数2,...]) AS<PL/SQL块> • 过程名:数据库服务器合法的对象标识 • 参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。参数也可以定义输入参数、输出参数或输入/输出参数。默认为输入参数。 • 过程体:是一个<PL/SQL块>。包括声明部分和可执行语句部分。 An Introduction to Database Systems

  13. 存储过程的用户接口 [例] 利用存储过程来实现下面的应用: 从一个账户转指定数额的款项到另一个账户中。 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; An Introduction to Database Systems

  14. 存储过程的用户接口 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; An Introduction to Database Systems

  15. 存储过程的用户接口 • 重命名存储过程 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 过程名() An Introduction to Database Systems

  16. 第八章 数据库编程 8.1 嵌入式SQL 8.2 存储过程 8.3 数据库接口编程 An Introduction to Database Systems

  17. 数据库接口编程 通过数据库引擎可以完成对数据库的访问,所谓数据库引擎其实是一组动态连接库(DLL),程序运行时被连接到程序中,从而而实现对数据库的访问功能。常见数据库访问接口如下: • ODBC API:开放数据库互连应用编程接口 • DAO:数据访问对象 • ADO:Active数据对象 • JDBC:JAVA数据库连接 数据库引擎的作用:采用一致的方式访问不通的数据库,提高了应用程序、数据库系统的移植性和通用性。缩短了系统开发时间。 An Introduction to Database Systems

  18. ODBC工作原理概述 • ODBC应用系统的体系结构 : 一、 用户应用程序 二、 驱动程序管理器 三、 数据库驱动程序 四、 ODBC数据源管理 An Introduction to Database Systems

  19. ODBC说明 • 数据源:是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,是一种数据连接的抽象 • 数据源对最终用户是透明的 • ODBC给每个被访问的数据源指定唯一的数据源名(Data Source Name,简称DSN),并映射到所有必要的、用来存取数据的低层软件 • 在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等 • 最终用户无需知道DBMS或其他数据管理软件、网络以及有关ODBC驱动程序的细节 An Introduction to Database Systems

  20. Error(s) Connection Command RecordSet Field(s) ADO数据库引擎 • ADO数据对象模型模型(与语言无关) 指定数据连接提供者,建立到数据源的连接。 可执行一个命令,如可执行SQL查询。一般用于表结构的修改。 可执行SQL查询返回一个记录集,并可对记录集进行修改、插入、删除操作。是ADO中最灵活的对象。 An Introduction to Database Systems

  21. 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(“年龄”) An Introduction to Database Systems

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

  23. 打开的对象 记录集的打开方式 rs.open strSQL,cn,adOpenDynamic,adLockOptimistic,adCmdText 数据集 声明的Connection对象 ADO数据库引擎相关要点 • Recordset对象的LocyType属性决定数据的锁定方式 • adLockReadOnly:数据处于只读状态。 • adLockPessimistic(保守式锁定):编辑数据时即锁定数据源记录,直到数据编辑完成才释放。 • adLockOptimistic(开放式锁定):编辑数据时不锁定,用Update方法提交数据时才锁定数据源记录。 • adLockBatchOptimistic(开放式更新):应用于批更新模式 An Introduction to Database Systems

  24. ADO数据库引擎相关要点 • Recordset记录集对象记录指针的移动方法 • MoveFirst记录指针移到第一条记录 • MoveNext记录指针移到当前记录的下一条记录 • MovePrevious记录指针移到当前记录的上一条记录 • MoveLast记录指针移到最后一条记录 • Recordset记录集的BOF和EOF属性用于判断记录指针是否处于有记录的正常位置 • 记录指针将指向最后一条记录之后,EOF属性为True • 记录指针将指向第一条记录之前,BOF属性为True • BOF和EOF属性的值均为True,表示记录集为空 An Introduction to Database Systems

  25. 下课了。。。 追 求 休息一会儿。。。 An Introduction to Database Systems

More Related