Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103605164
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-05-17 17:24:33

   来源:

  DB2® Viper 的重要特性是最新支持了对 XML 数据的存储、管理和搜索。通过一些解释如何完成基本任务的分步指导文章,您将快速地掌握这些新的 XML 特性。在本文中,您将如何创建用于管理 XML 数据的数据库对象和如何用 XML 数据填充您的 DB2 数据库。

  您可能已经听到了关于 DB2 的新 Viper 版本的一些议论 —— IBM 的第一个同时支持表格式(基于 SQL 的)和层次式(基于 XML 的)数据结构的数据库管理系统。如果您对 DB2 为 XML 提供新的 “原生支持”(Native Support)感到好奇,并且想快速地入门,那么这篇文章就是为您准备的。

  为了帮助您快速掌握 DB2 自身的 XML 特性,请完成几个普通的任务,比如:

  •   创建用于管理 XML 数据的数据库对象,包括一个测试数据库、一些示例表和视图。
  •   使用 INSERT 和 IMPORT 语句将 XML 数据填充到数据库中。
  •   验证您的 XML 数据。使用 DB2 开发和注册您的 XML 模式,并在导入数据时使用 XMLVALIDATE 选项。

  后续文章将包括其他主题,比如使用 SQL 查询、更新和删除 DB2 XML 数据,使用 XQuery 查询 DB2 XML 数据,开发存取 DB2 XML 数据的 Java 应用程序和 Web 组件。

  创建数据库对象

  让我们先来创建一个单独的 DB2 Unicode 数据库。在 DB2 Viper 中,只有 Unicode 数据库才能同时存储 XML 文档和 SQL 数据的更多传统格式,比如整数、日期/时间、变长字符串,等等。随后,您将在这个数据库中创建对象来管理 XML 和其他类型的数据。

  创建测试数据库

  为了创建一个新的 DB2 Unicode “测试” 数据库,打开 DB2 命令窗口,发出语句来指定 Unicode 编码集合和支持的区域,如 清单 1:

  清单 1. 创建用于存储 XML 数据的数据库

  create database test using codeset UTF-8 territory us

  一旦创建了 Unicode 数据库,您就不需要发出任何专门的命令或采取任何进一步措施来使 DB2 能够以它自身分层的格式存储 XML 数据,因为您的 DB2 系统已经准备好了。

  创建示例表

  为了存储 XML 数据,请创建包含一个或多个 XML 列的表。这些表充当文档集合的逻辑容器;在幕后,DB2 实际上使用了不同的存储方案来存储 XML 和非 XML 数据。然而,使用表作为管理各种受支持的数据格式的逻辑对象,简化了管理和应用程序开发问题,特别是当需要在一个单独的查询中集成不同的数据格式时。

  您可以对 DB2 表进行定义,使其只包含 XML 列、只包含传统 SQL 类型的列或者同时包含两者。本文对后一种情况进行了建模。清单 2 中的例子到 “测试” 数据库,并创建了两个表。第一个是 “items” 表,追踪关于货物的销售情况和顾客对货物的评价。第二个表追踪的是关于 “客户” 的信息,包括关于联系信息的数据。注意 “comments” 和 “contactinfo” 是基于新的 DB2 XML 数据类型,而所有其他的列都是基于传统 SQL 数据类型的。

  清单 2. 创建用于 XML 数据的表

  connect to test;

  create table items (id int primary key not null,
  brandname varchar(30),
  itemname varchar(30),
  sku int,
  srp decimal(7,2),
  comments xml
  );

  create table clients(
  id int primary key not null,
  name varchar(50),
  status varchar(10),
  contactinfo xml
  );

  如果您仔细地查看这些表定义例子,您将注意到 “comments” 和 “contactinfo” 列都没有进行 XML 文档内部结构的定义。这是 DB2 的一个重要特性。用户不需要为了存储数据而预定义一个 XML 数据结构(或者,更准确地说是一个 XML 模式)。事实上,DB2 可以在一个单独的列中存储任何格式良好的 XML 文档,这意味着不同模式的 XML 文档 —— 或没有和任何注册的模式关联的文档 —— 都可以存储在相同的 DB2 列中。当我们讨论如何在 DB2 中存储数据时,本文将深入讨论这个特性。

  创建视图

  您可以随意地在包含 XML 数据的表上创建视图,就像您可以在只包含传统 SQL 数据类型的表上创建视图一样。清单 3 中的例子创建具有 “Gold” 状态的客户的一个视图:

  清单 3. 创建一个包含 XML 数据的视图

  create view goldview as
  select id, name, contactinfo
  from clients where status='Gold';

  关于索引的一点说明

  最后,没有必要在 XML 列上创建专门的索引来提高数据的查询。因为这是一篇介绍性文章,而且示例数据很少,所以本文不会涵盖到那个主题。然而,在生产环境中,定义一个适当的索引对实现最佳的性能来说很关键。查看本文结尾部分的 “参考资料”,以助于了解 DB2 的新索引。

  存储 XML 数据

  创建好表之后,现在您就可以用数据填充它们了。您可以通过直接发出 SQL INSERT 语句来完成这项工作,或者通过调用 DB2 IMPORT 工具在后台发出 INSERT 语句。

  使用 INSERT 语句

  使用 INSERT,您可以直接向 DB2 中填充原始的 XML 数据。如果您已经编写了一个应用程序并在变量中存储了 XML 数据,那么这可能是最容易的。但是如果您只是刚开始使用 DB2 Viper,并且不想编写应用程序,那么您可以交互地发出 INSERT 语句(我发现使用 DB2 Command Editor 是很方便的,虽然您也可以使用命令行,如果您更喜欢那么做的话)。

  要使用 DB2 Command Editor,请启动 DB2 Control Center。从顶端的下拉菜单 “Tools” 中选择 Command Editor,将出现一个单独的窗口,如 图 1 所示。

  图 1. DB2 Command Editor

  DB2 Command Editor

  在上面的窗格中输入下列语句:

  清单 4. 交互地插入 XML 数据

  connect to test;

  insert into clients values (77, 'John Smith', 'Gold',
  xmlparse(document '箭头来执行该命令。

  注意,联机提供 XML 数据(如 清单 4 所示)需要您调用 XMLPARSE 函数,以把文档从字符值成 XML 类型值。本例中的输入文档相当简单 。如果文档很大或者很复杂,把 XML 数据键入到像清单 4 所示的 INSERT 语句中是不切实际的。在大多数情况下,您使用主机变量或者参数标记编写一个应用程序来插入数据。您将发现本文带有一个简要的 Java 代码编写例子。然而,由于这是一个介绍性的教程,所以我们不会详细地讨论应用程序开发主题。相反,我们将讨论使用数据填充 DB2 XML 列的另一种选择 —— 使用 IMPORT 工具。

阅读(345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~