标题：DB2V9/9.5高级应用开发
DB2 V9\9.5高级应用开发
作　者：管松 主编
肖振春 张建伟 林光国 王东明 闫庆宏 李尚雄 王庆法 编著
出 版 社： 电子工业出版社 
出版时间： 2008-12-1 
页　数：468页
开　本： 16开
I S B N ：9787121074219
所属分类： 图书 >> 计算机/数据库 >>DB2
定价：69.00元
宣传语
国内首本介绍最新DB2 V9高级应用开发的技术参考书。
内 容 简 介
20多年来，DB2应用开发的模式与技术不断创新，在可靠性、稳定性、伸缩性及可扩展性方面都极具优势，表现出色。
无论是用于教学还是对于从事DB2应用开发的专业人士，本书均是一本不可或缺的工具书。
丛 书 序
为致力于软件业务在中国的长期发展，IBM公司于1999年在中国投资成立了中国开发中心（IBM China Development Lab，CDL）。在为IBM全球客户提供满足需求的软件、硬件产品，以及技术和解决方案的同时，作为IBM全球软件资源在中国的窗口，CDL把全球先进技术引入中国，为中国软件产业与世界的交流搭建桥梁。
八年来，CDL不断吸引全球卓越的科技和管理人才，以及中国各大学府的顶尖学生、优秀工程师加入，并积极致力于同本土合作伙伴共同建设团队，研发队伍从八年前的100多位软件工程师增至今天的3000多位，年平均成长速度超过50%。
CDL高度重视员工培养，除各种短期或长期的培训，员工还被派往IBM在美国或其他地区的实验室，与世界各地同仁一起工作，在工作中学习先进的技术和管理方式。CDL更是将IBM全球实验室中拥有丰富经验的技术和管理人才请到中国工作，向中国员工传授经验。庞大的资金注入，人性化的管理方式，以及对人才方面的巨大投资，对人力资本的极度重视，使中国开发中心得以与IBM全球实验室共同成长，最终拥有一支经验丰富，训练有素的团队。
目前，CDL与全世界同步发展多项领域产品，正在为包括Information Management、WebSphere、Lotus、Tivoli、Rational在内的所有IBM软件核心产品的研究和开发作出卓越贡献，并在SOA、数据库、WebSphere产品系列、普及运算、Lotus Workplace Client技术及Linux系统方面取得非凡的成就，被视为IBM全球产品的开发重心之一。
在CDL高速发展的同时，为将信息产业的最新技术尽快地转化为对中国用户有价值的解决方案，帮助用户更有成效地开展业务，增强竞争优势，我们恪守为中国软件业与世界交流搭建桥梁的承诺，希望将IBM全球公司几十年的技术积淀和我们的心得与大家共同分享，于是，我们选择了实力非凡、专业创新的电子工业出版社博文视点公司作为合作伙伴，推出这一由IBM中国开发中心（CDL）的架构师、资深软件工程师们编写的系列丛书，范围涵盖了从开发实践、测试方法、项目实践、最新技术标准和发展趋势探讨，到先进解决方案构建、面向服务的架构的提供等诸多方面。
我希望这套丛书能把我们一线专家宝贵的经验，以及我们的见解呈现给读者，并希望无论是企业IT经理、程序设计和开发人员、软件工程师、软件架构师，还是在校学生，或者是对计算机领域有兴趣的人员，都能从中获取知识或者得到启发。
在同业界分享经验和世界最新技术及趋势的同时，我们希望能为推动中国软件产业的加速发展贡献微薄之力。IBM中国开发中心将一如既往地同业界同仁一起，共铸中国信息产业的辉煌明天！
郑妙勤
IBM院士、总经理 IBM中国开发中心
专家推荐
当我听到IBM中国软件开发中心的同仁即将出版一本讨论DB2应用开发的书籍时，感到十分兴奋。也忆起当年在校第一次接触关系型数据库及其查询语言SEQUEL的往事。1975年，SEQUEL只是刚发表的论文，无论作业还是考试，学生与教授均只能以书面出题，书面作答及批改。而今，由IBM研究实验室发展出来的关系型数据模型及其SQL查询语言已成为全世界的标准模式，而DB2产品系列亦成为全球应用非常普遍的数据库系统。
DB2应用开发的概念是研究如何融合一种编程语言（如COBOL、C/C++、JAVA）与DB2系统。这种融合包括了语意及资料交换和程序控制，也就是一般所称的应用编程界面（API）。DB2最初所提出的模式是将SQL语言延伸至应用编程语言的源程序，即为本书中所提到的DB2嵌入式SQL开发。其特点是将应用程序与DB2紧密结合，使应用程序编程更容易，执行时更有效率。此技术利用DB2的预编译器（Precompliler）提取SQL语句。处理后，生成相对应的应用程序语句。另外一种方式是由应用程序直接调用DB2提供的各种子程序来连接至DB2数据库，发出SQL请求，并交换各种需要的数据。这种方式提供了CLI，ODBC，OLEDB式样的应用界面给C/C++应用环境，提供了JDBC的应用界面给Java应用环境，以及相似的应用界面对PHP等脚本语言的支持。由于预编译器的一些功能由应用程序开发人员编写程序来取代，因此，开发出来的源程序会比较大，维护工作也比较烦琐，但是避免了对预编译器的需要，这样使得一些新的应用环境能很快地与DB2数据库结合，也减少了在应用开发中预编译的步骤。
以上两种DB2的应用开发模式，都是通过SQL语言来实现的。随着面向对象的方法在应用中的日益普遍，以对象持久化为概念而推出的应用开发模型也是一种新的趋势，特别是在一些新兴的应用类型中这种趋势更为明显。Hibernate是为大家所熟知的一个基于开放源代码及针对Java应用的数据持久化框架，EJB实体Bean是J2EE下管理持久化数据的组件框架。
随着DB2技术的发展，许多应用技术从传统的用户层转移至DB2服务器端。参照完整性约束最早是由用户应用来实现的，现在多半由DB2实现了。随之而来的，也是为大家所熟知的，有存储过程、触发器，用户自定义类型与用户自定义函数等。DB2服务器端所生成的应用也都有着各种应用开发的环境及技术。DB2的各种约束、触发器及用户自定义类型大多是由SQL语句来定义的。存储过程及用户定义函数可以通过SQL语句来开发，也可以用传统的应用语言来开发，例如COBOL、C/C++、Java等。在这些情况下，使用嵌入式模式或者调用式接口模式均可。
XML即可扩展标记语言，经过近年来的快速发展，已经成为各行业资讯交换的标准。关系型数据库模型以表（也就是行与列的方式）存储及访问数据。而XML数据模型以层次型（也就是树形的方式）存储及访问数据。XPath及XQuery是访问XML层次型数据的基本语言。DB2最早推出基于用户定义数据类型及函数为技术基础的XML扩展器。DB2v9提供了纯XML的存储、索引、优化，以及最先进的SQL /XML及XQuery查询语言。
DB2的应用是通往DB2厅堂的大门，熟悉DB2的应用开发是开启大门的钥匙。二十多年来，DB2应用开发的模式与技术不断地在创新。本书详尽地为大家介绍了一系列DB2应用开发的方法及丰富的实例。从嵌入式SQL应用开发、各种DB2调用式接口的应用模式、DB2服务端的应用开发、XML层次型数据的应用，至DB2性能分析及调整，深入浅出，见解精辟，无论是用于教学还是对于从事DB2应用开发的专业人士，均是一本不可或缺的工具书。
王云
深秋于硅谷
作 者 简 介
管松，现为IBM中国软件开发中心企业内容管理产品（Content Manager）开发经理，毕业于中国科学院软件所，加入IBM研发中心工作后涉及领域包括Websphere Commerce，主机上的DB2数据库系统等。
肖振春，IBM中国软件开发中心高级工程师，毕业于北京航空航天大学。从事数据库领域信息整合和数据复制方面的工作，熟悉DB2应用开发和性能调优。
张建伟，IBM中国软件开发中心高级工程师，毕业于北京大学，从事主机上DB2研发工作。熟悉DB2内部实现，精通DB2 JDBC/SQLJ驱动程序。
林光国，IBM中国软件开发中心高级工程师，毕业于清华大学。曾作为IBM开发中心的首批DB2/i工程师在iSeries (AS400)平台上从事开发工作。目前任职于IBM Linux解决方案中心，从事企业应用方案的售前技术支持。
王东明，IBM中国软件开发中心高级工程师，毕业于南开大学，负责数据库领域IBM企业内容管理产品的开发和技术支持。个人技术兴趣主要在数据库系统和应用开发，Web应用开发领域。
闫庆宏，IBM中国软件开发中心工程师，毕业于东北大学。从事DB2主机研发相关的工作，参与PHP实际项目的开发。
李尚强，IBM中国软件开发中心高级工程师，毕业于清华大学。从事数据库领域内容管理方面的工作，熟悉DB2应用开发和性能调优。
王庆法，IBM中国软件开发中心高级工程师，毕业于清华大学，拥有10年以上软件开发经验。从事数据库领域信息整合方面的工作，熟悉DB2内部实现、XML及信息整合的架构。
前 言
DB2数据库是IBM公司提供的企业级关系型数据库解决方案，是IBM在数据库领域的重量级产品，它在可靠性、稳定性、伸缩性及可扩展性等方面，都极具优势，表现出色。
1980年，System R项目诞生，这具有划时代的意义，因为在这个项目中首次实现了关系型数据库服务器的原型。1982年，SQL/DS产品被用于大型机操作系统VM和VSE中，这是业界第一个以SQL作为接口的商用数据库管理系统，它也是基于System R的原型设计出来的。1983年，DB2终于横空出世，当时主要用在MVS上（DATABASE 2 for MVS）。1987年，OS/2 Extended Edition中的数据库管理器实现了分布式系统上的首个关系型数据库。随后，DB2在跨平台方面进一步发展，不仅用在IBM iSeries（OS/400操作系统）和zSeries（OS/390、z/OS、z/VM和zLinux）等大型主机和服务器系列上，也跨越了AIX、HP-UX、Solaris、Windows和Linux等各种LUW平台。
如今，DB2家族产品进一步延伸，比如用于支持手持设备和嵌入式Linux环境的DB2 Everyplace，就是当前DB2产品系列中发展迅速的一个分支。而用于数据挖掘和商业智能方面的Data Warehouse Editon （DWE），也在迅猛发展。DB2数据库系统的功能也进一步加强和拓展，比如，本书就特别涉及了DB2对很多当前主流开发语言的支持，以及DB2 V9强大的新特性。
可以毫不夸张地说，经历了20多年风风雨雨的DB2，一直是世界数据库领域的先行者和领导者。随着DB2在中国的推广，其客户越来越多，其使用范围也越来越广。然而国内DB2书籍却比较缺乏，特别是面向DB2应用开发的相关书籍。IBM中国开发中心作为DB2在中国的主要研发基地，我们作为在IBM中国工作在DB2第一线的研发人员，感到沉重的使命感。这也就是本书写作的初衷。
作者 
2008年
致谢及声明
本书是集体创作的结晶，在此非常感谢所有作者出色的协作精神。本书的写作也占用了大家大量的休息、娱乐，以及和家人在一起的时间，所以也特别感谢作者们家人的理解和支持。同时，成书的过程与许多人的关怀、鼓励和支持密不可分。借此机会，感谢IBM中国知识产权律师仲崇国先生，IBM软件开发中心CEO郑妙勤女士，IM（信息管理）部门主任吉燕勇的支持，以及IM部门很多同事的大力协助，在此恕不能一一列举。特别要提到的是IBM院士和数据库领域专家王云先生，在本书选题，大纲规划，讨论审阅的过程中一直给予我们很多指导和帮助，最后还慨然题写了序文，在此表示衷心地感谢。最后，还要特别感谢出版社的有关领导、协调人员及编辑，有了他们的支持和参与，本书才得以顺利出版。
声 明
本书中提到任何国际商业机器公司（以下称“IBM”）的产品、程序或服务，均不表明或暗示只有IBM公司可以提供。
本书不带有任何明示或暗含的保证。本书提供的建议或最佳实践只作为一般的经验分享，只在作者的特定环境下验证过。作者不保证这些建议或最佳实践在任何情况下都有效。本书中任何带有主观性的陈述都只代表本书作者个人的观点，不代表IBM公司的官方立场。由于时间仓促、水平有限，书中难免存在不足和疏漏之处。在此敬请读者不吝指出，我们将愿意与读者共同探讨，并不胜感激。
作 者
2008年
目 录
第1章 DB2及应用开发基础 1
1.1 DB2简介 1
1.1.1 DB2 V7 1
1.1.2 DB2 V8 2
1.1.3 DB2 V9 5
1.2 DB2 V9新特性 6
1.2.1 更多的XML的支持 6
1.2.2 更易于维护 9
1.2.3 更多选择的分区支持 10
1.2.4 更佳的安全性 11
1.2.5 数据库设计 11
1.3 DB2 V9安装 12
1.3.1 DB2 V9的安装 12
1.3.2 响应文件安装 16
1.3.3 创建第一个数据库 20
1.4 DB2图形工具和数据库对象 22
1.4.1 DB2图形工具 22
1.4.2 DB2数据库对象 26
1.4.3 DB2应用开发的数据库对象 30
1.5 DB2常用命令简介 33
1.6 DB2应用开发编程方法 35
1.6.1 基于驱动的API编程 36
1.6.2 嵌入式SQL编程 39
1.7 本章小结 41
第2章 DB2 JDBC应用开发 42
2.1 Java简介 42
2.2 JDBC基础知识 44
2.2.1 JDBC驱动程序分类 45
2.2.2 JDBC程序开发基本步骤 46
2.2.3 JDBC主要的接口与类 50
2.2.4 JDBC规范简介 51
2.2.5 Java、JDBC与SQL数据类型映射关系 53
2.3 IBM DB2 JDBC/SQLJ通用驱动程序 57
2.3.1 通用驱动程序介绍 57
2.3.2 通用驱动程序安装 58
2.3.3 通用驱动程序连接性 60
2.3.4 通用驱动程序事务控制 61
2.3.5 通用驱动程序安全机制 62
2.3.6 通用驱动程序对于XML访问的支持 67
2.3.7 对应用程序运行监控的支持 75
2.3.8 对客户机重新路由的支持 77
2.4 JDBC应用程序高级主题 79
2.4.1 访问LOB（大对象） 79
2.4.2 使用恰当的数据类型访问LOB 81
2.4.3 访问单值数据类型 84
2.4.4 设置保存点 84
2.4.5 获取identity列的取值 86
2.4.6 处理存储过程返回的多个结果集 88
2.4.7 使用ResultSetMeta获取结果集的元数据信息 89
2.4.8 使用DatabaseMetaData获取数据源的元信息 90
2.4.9 使用ParameterMetaData获取参数的元数据 92
2.4.10 在JDBC应用程序中批量更新 93
2.4.11 从BatchUpdateException中获取信息 95
2.4.12 使用DB2通用驱动程序执行批量查询 97
2.4.13 DB2通用驱动程序中ResultSet的特征 98
2.4.14 为DB2服务器提供客户端信息 101
2.5 DB2 Java开发的性能优化 103
2.5.1 关闭auto commit 103
2.5.2 只对需要的列进行获取或修改 103
2.5.3 将数字存储成数字类型 103
2.5.4 使用DB2自带的函数 103
2.5.5 及时释放资源 104
2.5.6 给参数赋值的时候使用匹配的类型 104
2.5.7 调整Java虚拟机堆大小 104
2.5.8 保持对JDK和JDBC驱动程序的更新 104
2.6 错误诊断和分析处理 104
2.6.1 DB2对错误特别的处理 105
2.6.2 Trace的设置 106
2.7 本章小结 110
第3章 使用PHP开发DB2应用 111
3.1 PHP简介 111
3.1.1 概念 111
3.1.2 用途 111
3.1.3 特点 112
3.1.4 工作原理 113
3.2 安装和配置 113
3.2.1 Linux下PHP的安装和配置 114
3.2.2 Windows下PHP的安装和配置 115
3.3 使用PHP脚本访问DB2 116
3.3.1 IBM_DB2 API 116
3.3.2 PDO_ODBC 137
3.3.3 Unified ODBC 152
3.4 PHP中面向对象编程简介 159
3.5 本章小结 161
第4章 DB2 V9中的pureXML 162
4.1 XML数据库 162
4.1.1 XML基础 162
4.1.2 XML数据库 165
4.2 DB2 V9中的pureXML 167
4.2.1 pureXML特性 167
4.2.2 查询应用与编程 172
4.3 pureXML应用开发实例 179
4.3.1 存储过程 179
4.3.2 Ruby On Rails集成 182
4.4 本章小结 189
第5章 DB2 .NET应用开发 190
5.1 DB2 .NET支持概述 190
5.1.1 .NET简介 190
5.1.2 ADO.NET架构 191
5.1.3 DB2 .NET应用程序架构 192
5.1.4 DB2 .NET Data Provider 193
5.1.5 DB2 Visual Studio加载件 193
5.1.6 安装和发布 194
5.2 快速开发DB2 .NET应用程序 194
5.2.1 创建SAMPLE数据库 194
5.2.2 连接DB2数据库 195
5.2.3 第一个DB2 .NET应用 196
5.3 使用DB2加载件从Visual Studio管理DB2数据库 198
5.3.1 向导和IBM设计器 198
5.3.2 使用表设计器管理表、键、索引、约束和触发器 198
5.3.3 使用视图设计器管理视图 201
5.3.4 执行查询 201
5.3.5 使用过程设计器管理SQL过程 202
5.3.6 使用向导创建SQL函数 205
5.4 DB2 .NET API——连接数据库 207
5.4.1 示例程序 207
5.4.2 设置连接属性 209
5.4.3 连接池 210
5.4.4 DB2Connection常用属性和方法 210
5.5 DB2 .NET API——查询数据 211
5.5.1 DB2DataReader与DataSet的区别 211
5.5.2 DB2DataReader常用属性和方法 212
5.5.3 分页读取数据 214
5.5.4 查询单值和单行数据 216
5.5.5 使用DB2ResultSet 216
5.5.6 API切换 219
5.5.7 .NET与DB2常用数据类型对应表 219
5.6 DB2 .NET API——更新数据 220
5.6.1 执行Insert/Update/Delete语句 220
5.6.2 批量更新 222
5.6.3 DB2Command主要属性和方法 223
5.7 DB2 .NET API——执行存储过程 223
5.7.1 调用不返回结果集的存储过程 223
5.7.2 调用返回结果集的存储过程 225
5.7.3 DB2Parameter主要属性 226
5.8 DB2 .NET API——高级特性 227
5.8.1 事务处理和并发控制 227
5.8.2 读写LOB（大对象）数据 228
5.8.3 读写XML数据 231
5.8.4 通用API编程 232
5.9 本章小结 234
第6章 DB2嵌入式SQL应用开发 235
6.1 嵌入式SQL编程 235
6.1.1 嵌入式SQL 235
6.1.2 嵌入式SQL应用程序开发的一些概念 235
6.1.3 构建嵌入式SQL应用程序的过程 241
6.1.4 静态SQL和动态SQL 243
6.2 静态嵌入式SQL应用编程 244
6.2.1 静态嵌入式SQL应用程序的特点 244
6.2.2 如何构建静态嵌入式SQL应用程序 246
6.2.3 宿主语言变量和指示符号的使用 246
6.2.4 静态嵌入式SQL中游标的使用 253
6.2.5 SQLCA和诊断信息处理 260
6.3 动态嵌入式SQL应用编程 265
6.3.1 动态嵌入式SQL应用程序的特点 265
6.3.2 如何构建动态嵌入式SQL应用程序 266
6.3.3 动态嵌入式SQL中游标的使用 268
6.3.4 SQLDA的结构和使用 270
6.3.5 动态嵌入式SQL的一些限制 274
6.4 动态SQL和静态SQL的比较 274
6.4.1 概念上的对比 274
6.4.2 动态绑定和静态绑定 275
6.4.3 性能上的对比 275
6.4.4 适用情况的对比 276
6.5 复合SQL 277
6.6 本章小结 279
第7章 DB2高级应用 280
7.1 存储过程 280
7.1.1 存储过程概念 280
7.1.2 SQL存储过程 282
7.1.3 外部存储过程 286
7.1.4 存储过程的构建 298
7.1.5 条件处理（Condition Handler） 303
7.1.6 在存储过程中使用SQLDA 306
7.1.7 在存储过程中使用LOB 309
7.1.8 临时表 313
7.2 用户自定义函数及数据类型 315
7.2.1 用户自定义函数的概念 315
7.2.2 用户自定义函数的分类 316
7.2.3 用户自定义数据类型 333
7.3 触发器 337
7.3.1 触发器的概念 337
7.3.2 触发器的属性 337
7.3.3 触发器的类型 340
7.4 本章小结 345
第8章 DB2并发技术和性能调整 346
8.1 DB2中并发和锁的概念 346
8.2 DB2锁的影响 347
8.3 事务锁的几个特征 348
8.3.1 锁的粒度 348
8.3.2 锁的持续时间 349
8.3.3 锁的模式 350
8.3.4 锁的对象 352
8.4 锁的调整 353
8.4.1 bind选项 353
8.4.2 在SQL语句中重载隔离级别 363
8.4.3 LOCK TABLE语句 364
8.5 提高并发性的一些建议 366
8.5.1 数据库设计上的建议 366
8.5.2 应用程序设计上的建议 367
8.6 DB2性能调整概述 370
8.6.1 性能调整的概念 370
8.6.2 性能调整的目标 374
8.7 DB2性能调整原理 376
8.7.1 DB2工作原理 376
8.7.2 SQL编译过程 388
8.7.3 优化器原理 392
8.8 调整DB2配置 395
8.8.1 配置顾问程序 395
8.8.2 基准程序 398
8.8.3 DB2参数调整 403
8.9 DB2应用程序性能设计和调整 407
8.9.1 影响DB2应用性能的重要因素——并发性控制和锁定 407
8.9.2 DB2应用程序性能设计策略 408
8.10 DB2性能工具介绍和示例 417
8.10.1 DB2设计顾问程序 418
8.10.2 监视工具 418
8.10.3 说明工具 420
8.10.4 RUNSTATS 421
8.10.5 重组（REORG） 422
8.11 本章小结 424
附录A DB2问题诊断工具介绍 425
附录B DB2网络搜索扩展器（DB2 Net Search Extender） 438
专有词汇列表 444
参考文献 448