没有合适的资源?快使用搜索试试~ 我知道了~
DB2 应用开发和系统管理DB2开发基础
需积分: 10 3 下载量 162 浏览量
2011-02-23
20:49:39
上传
评论
收藏 462KB DOC 举报
温馨提示
试读
64页
DB2 应用开发和系统管理DB2开发基础.doc
资源详情
资源评论
资源推荐
第一章 DB2 开发基础
在进行 DB2 应用开发之前,了解 DB2 应用程序的结构,掌握相关概念,设置开发环
境是很必要的。本章主要介绍这几个方面的内容。
1.1 DB2 应用程序开发概述
1.1.1 程序结构
DB2 应用程序包括以下几个部分:
1.声明和初始化变量
2.连接到数据库
3.执行一个或者多个事务
4.与数据库断开连接
5.结束程序
一个事务是一组数据库操作,在提交给数据库之前,必须确认完全成功执行。在嵌入
式 SQL 应用程序中,当应用程序成功地连接到一个数据库时,一个事务就自动开始了,结
束于执行一条 COMMIT 语句或者 ROLLBACK 语句。同时,下一条 SQL 语句开始一个新
的事务。
每一个应用程序的开始必须包括:
数据库管理器用来与宿主程序交互的所有变量和数据结构的声明
设置 SQL 通信区(SQLCA),提供错误处理的 SQL 语句
注意:用 JAVA 写的 DB2 应用程序在 SQL 语句出错时抛出一个 SQLException 异常,
需要在 catch 块里处理,而不是使用 SQLCA。
每个应用程序的主体包括访问和管理数据的 SQL 语句。这些语句组成事务,事务必须
包括下列语句:
CONNECT 语句,其建立一个与数据库服务器的连接
一条或多条:
▲数据操纵语句(例如,SELECT 语句)
▲数据定义语句(例如,CREATE 语句)
▲数据控制语句(例如,GRANT 语句)
COMMIT 或者 ROLLBACK 语句结束事务
应用程序的结束通常包括释放程序与数据库服务器的连接和释放其他资源的 SQL 语
句。
1.1.2 开发方法选择
可使用几种不同的程序设计接口来存取 DB2 数据库。您可以:
将静态和动态 SQL 语句嵌入应用程序。
在应用程序中编写“DB2 调用层接口”(DB2 CLI) 的函数调用,以调用动态 SQL 语
句。
开发调用“Java 数据库链接”应用程序设计接口 (JDBC API) 的 Java 应用程序和小程
序。
开发符合“数据存取对象 (DAO) ”和“远程数据对象 (RDO) ” 规范的 Microsoft
Visual Basic 和 Visual C++ 应用程序,以及使用“对象链接和嵌入数据库 (OLE DB)
桥接”的“ActiveX 数据对象”(ADO) 应用程序。
使用 IBM 或第三方工具如 Net.Data、Excel、Perl、“开放式数据库链接” (ODBC)
最终用户工具如 Lotus Approach 及其程序设计语言 LotusScript 来开发应用程序。
要执行备份和复原数据库等管理功能,应用程序可以使用 DB2 API。
应用程序存取 DB2 数据库的方式将取决于想要开发的应用程序类型。例如,如果想开
发数据输入应用程序,可以选择将静态 SQL 语句嵌入应用程序。如果想开发在万维网
(WWW) 上执行查询的应用程序,可能要选择 Net.Data、Perl 或 Java。
1.2 相关概念
1.2.1 嵌入式 SQL 编程
嵌入式 SQL 应用程序就是将 SQL 语句嵌入某个宿主语言中,SQL 语句提供数据库接
口,宿主语言提供应用程序的其他执行功能。
“结构化查询语言”(SQL) 是一种数据库接口语言,它用来存取并处理 DB2 数据库中的
数据。可以将 SQL 语句嵌入应用程序,使应用程序能执行 SQL 支持的任何任务,如检索
或存储数据。通过使用 DB2,可以用 C/C++、COBOL、FORTRAN、Java (SQLJ) 以及
REXX 程序设计语言来编写嵌入式 SQL 应用程序。
嵌入了 SQL 语句的应用程序称为主程序。用于创建主程序的程序设计语言称为宿主语
言。用这种方式定义程序和语言,是因为它们包含了 SQL 语句。
对于静态 SQL 语句,您在编译前就知道 SQL 语句类型以及表名和列名。唯一未知的
是语句正搜索或更新的特定数据值。可以用宿主语言变量表示那些值。在运行应用程序之
前,要预编译、编译和捆绑静态 SQL 语句。静态 SQL 最好在变动不大的数据库上运行。
否则,这些语句很快会过时。
相反,动态 SQL 语句是应用程序在运行期构建并执行的那些语句。一个提示最终用户
输入 SQL 语句的关键部分(如要搜索的表和列的名称)的交互式应用程序是动态 SQL 一
个很好的示例。 应用程序在运行时构建 SQL 语句,然后提交这些语句进行处理。
可以编写只有静态 SQL 语句或只有动态 SQL 语句,或者兼有两者的应用程序。
一般来说,静态 SQL 语句最适合用于带有预定义事务的高性能应用程序。预订系统是
这种应用程序一个很好的示例。
一般来说,动态 SQL 语句最适合于必须在运行期指定事务的、要快速更改数据库的应
用程序。交互式查询界面是这种应用程序一个很好的示例。
将 SQL 语句嵌入应用程序时,必须按以下步骤预编译应用程序并将其与数据库捆绑:
1. 创建源文件,以包含带嵌入式 SQL 语句的程序。
2. 连接数据库,然后预编译每个源文件。
预编译程序将每个源文件中的 SQL 语句转换成对数据库管理程序的 DB2 运行期 API
调用。预编译程序还在数据库中生成一个存取程序包,并可选择生成一个捆绑文件(如果
您指定要创建一个的话)。
存取程序包包含由 DB2 优化器为应用程序中的静态 SQL 语句选择的存取方案。这些
存取方案包含数据库管理程序执行静态 SQL 语句所需的信息,以便该管理程序可以用优化
器确定的最有效的方式来执行这些语句。对于动态 SQL 语句,优化器在您运行应用程序时
创建存取方案。
捆绑文件包含创建存取程序包所需要的 SQL 语句和其他数据。可以使用捆绑文件在以
后重新捆绑应用程序,而不必首先预编译应用程序。重新捆绑创建针对当前数据库状态的
优化存取方案。如果应用程序将存取与预编译时所用数据库不同的数据库,则必须重新捆
绑应用程序。如果数据库统计信息自上次捆绑后已经更改,建议您重新捆绑应用程序。
3. 使用主语言编译程序编译修改的源文件(以及其他无 SQL 语句的文件)。
4. 将目标文件与 DB2 和主语言库连接,以生成一个可执行程序。
5. 如果在预编译时未对捆绑文件进行捆绑;或者准备存取不同数据库,则应对捆绑文
件进行捆绑以创建存取程序包。
6. 运行该应用程序。此应用程序使用程序包中的存取方案存取数据库。
1.2.2 预编译
创建源文件之后,必须对每一个含有 SQL 语句的宿主语言文件用 PREP 命令进行预编
译。预编译器将源文件中的 SQL 语句注释掉,对那些语句生成 DB2 运行时 API 调用。
在预编译一个应用之前,必须连接到一个数据库服务器,不论是自动连接还是显性连
接。即使你在客户端工作站上预编译应用程序、预编译器在客户端产生的修改后源文件和
信息,预编译器也需要使用服务器连接来执行一些确认任务。
预编译器也创建数据库管理器在处理针对某个数据库的 SQL 语句时需要的信息。这些
信息存储在一个程序包或者一个捆绑文件或者两者之中,视预编译器的选项而定。
下面是使用预编译器的一个典型例子。预编译一个名叫 filename.sqc 的 C 嵌入式 SQL
源文件,发出下面的命令创建一个 C 源文件,默认名字为 filename.c,和一个捆绑文件,默
认名字为 filename.bnd:
DB2 PREP filename.sqc BINDFILE
预编译器最多产生四种类型的输出:
修改后的源文件
程序包
捆绑文件
信息文件
1、修改后的源文件
这个文件是预编译器将 SQL 语句转化为 DB2 运行时 API 调用后,原始源文件的新版
本。它被赋予了相应宿主语言的扩展名。
2、程序包
如 果 使 用 了 PACKAGE 选 项 ( 默 认 的 ) , 或 者 没 有 指 定 任 何
BINDFILE、SYNTAX、SQLFLAG 选项,程序包存储在所连接到的数据库中。程序包仅仅
包含执行访问本数据的 SQL 语句时需要的所有信息。除非你用 PACKAGE USING 选项指
定一个不同的名字,否则预编译器将使用源文件名字的前 8 个字符作为程序包名。
使用 PACKAGE 选项时,在预编译处理过程中使用的数据库必须拥有源文件中静态
SQL 语句参考到的所有数据库对象。例如不能够预编译一条 SELECT 语句,如果参考的表
在数据库中不存在。
3、捆绑文件
如果使用了 BINDFILE 选项,预编译器将创建一个捆绑文件(扩展名为.bnd),它包
含创建程序包的一些数据。这个文件可以在后面用 BIND 命令将应用捆绑到一个或多个数
据库。如果指定了 BINDFILE 选项,没有指定 PACKAGE 选项,捆绑被延缓直到执行
BIND 命令。注意,对于命令行处理器(CLP), PREP 默认不指定 BINDFILE 选项。因此,
如果你使用 CLP,又想延缓捆绑,那么你必须指定 BINDFILE 选项。
如果在预编译时请求一个捆绑文件但是没有指定 PACKAGE 选项,不会在数据库中创
建程序包;对象不存在和没有权限的 SQLCODE 被看作警告而不会被看作错误。这使得你
能够预编译程序和创建一个捆绑文件,不需要参考到的对象必须存在,也不需要你拥有执
行正被预编译的 SQL 语句的权限。
4、信息文件(Message File)
如果使用了 MESSAGES 选项,预编译器将信息重定向到指定的文件中。这些信息包
括警告和错误信息,它们描述了在预编译过程中产生的问题。如果源文件没有预编译成功
使用警告和错误信息来断定问题,改正源文件,然后再预编译。如果没有使用 MESSAGE
选项,预编译信息被写到标准输出上。
1.2.3 程序包
程序包就是存储在相对应数据库中的包含数据库系统在捆绑时对特定 SQL 语句所产生
的访问策略。
所有 SQL 语句经过编译优化后就产生可以直接对数据库进行访问的访问策略,存储于
相应的数据库中。这些访问策略可以在应用程序调用相对应的 SQL 语句时得到访问。程序
包对应于特定的应用程序,但是并不是与应用程序一起存放,而是同相对应的数据库一起
存放。
1.2.4 捆绑
捆绑(bind)是创建数据库管理器在应用执行时为了访问数据库而需要的程序包的过程。
捆绑可以在预编译时指定 PACKAGE 选项隐含地完成,或者使用 BIND 命令依据预编译过
程中产生的捆绑文件显性地完成。
下面是使用 BIND 命令的一个典型例子。将名为 filename.bnd 的捆绑文件捆绑到数据库,
使用下面的命令:
DB2 BIND filename.bnd
每一个独立预编译的源代码模块都需要创建一个程序包。如果一个应用有 5 个源文件,
其中 3 个需要预编译,那么要创建 3 个程序包或者 3 个捆绑文件。默认上,每一个程序包
的名字与产生.bnd 文件的源文件名字相同,但是只要前 8 个字符。如果新建的程序包名字
与已存在于数据库中的程序包名相同,新的程序包将替换原先存在的程序包。要显性地指
定一个不同的程序包名,必须在 PREP 命令使用 PACKAGE USING 选项。
1.2.5 工作单元
一个工作单元是一个单一的逻辑事务。它包含一个 SQL 语句序列,在这个序列中的所
有 操 作 , 被 看作 一个 整体 , 要 么 都 成 功 , 要 么 都失 败。 DB2 支 持两 种 类 型 的 连 接
(connection)。连接类型决定一个应用程序如何与远程数据库工作,并且决定该应用程序
同时能与多少个数据库工作。
(1) 连接类型 1
应用程序在每个工作单元中只能连接单个数据库,此时,这个工作单元称为远程工
作单元(RUOW, Remote Unit of Work)
(2) 连接类型 2
允许应用程序在每个工作单元中连接多个数据库,此时,这个工作单元称为分布式
工作单元(DUOW, Distributed Unit of Work)
我们来看下面的例子:
(1) Remote Unit of Work – Type 1 Connect
在这个例子中,连接类型为 1,工作单元为远程工作单元(RUOW),应用程序在连接
到数据库 DB2_2 之前,必须结束当前的工作单元(即事务,通过执行 COMMIT 语句)。
DB2_1
DB2_1
CONNECT TO DB2_1
…
SQL(DB2_1)
…
COMMIT
CONNECT TO DB2_2
…
SQL(DB2_2)
…
COMMIT
剩余63页未读,继续阅读
hanish
- 粉丝: 0
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0