为DB2 XML数据开发Java应用程序
执行查询
在构建查询之后,就可以准备运行它了。
定位到 Data 项目中的查询,右击并选择 Run SQL。
当出现提示时,为客户状态(比如 "Gold" 或 "Silver")指定一个输入值,并单击 OK。
在 Data Output 窗格中查看结果。
存储过程
在网络环境中,存储过程通常可减少客户机应用程序与 DB2 之间所需的通信,因此这改善了运行时性能。利用 Viper,存储过程可以包含 XML 参数和变量。
尽管详细讨论存储过程的开发超出了本文范围,但是提供了一个简单的场景,您可以看到 DB2 存储过程可以如何编写来检索部分 XML 文档。该场景使用 Developer Workbench 中的向导来生成、部署和运行必需的 SQL 存储过程代码。如果需要,您可以使用 DB2 的命令行处理器开发和部署一个等价的 SQL 存储过程。另外,还可以用 Java 编写基于 XML 的存储过程。
对于本例来说,您将编写一个存储过程来检索具有特定状态的客户的姓名和主电子邮件地址,就像前面所做的一样。尽管该过程非常简单,但是也能帮助您理解如何使用内置向导生成基于 SQL 的过程来查询并返回 XML 数据。
要创建该过程,需执行一些简单的步骤:
准备工作区。
指定过程的内容。
部署并测试过程。
下面依次介绍这些步骤。
准备工作区
存储过程被定义为 Data 项目的一部分。如果已经这样做了,就打开 Data 透视图,建立一个数据库连接,并创建一个 Data 项目。有关详细信息,请参见前一节 准备工作区。
创建过程
我们的基于 SQL 的存储过程调用一个简单的 SQL/XML 语句来基于调用者的输入查询 "clients" 表。该过程返回一个简单的结果集,其中包含一个 SQL VARCHAR 列(用于客户的姓名)和一个 XML 列(用于客户电子邮件)。查询将类似于下面的代码:
清单 18. 示例 SQL/XML 查询
SELECT name, xmlquery('$c/Client/email[1]'
passing contactinfo as "c")
from clients where status = ?
构建访问 XML 数据的 SQL 存储过程的过程与构建访问非 XML 数据的 SQL 过程没什么不同。下面是做这件事的方法之一:
定义一个新的存储过程。展开新的 Data 项目,高亮显示 Stored Procedures,并右击鼠标。选择 New > Stored Procedure。根据提示验证项目名并指定一个存储过程名。保持默认的语言类型为 SQL。
指定 SQL 语句。当出现提示时,您可以直接键入查询语句或者使用向导帮助您创建一个查询语句。下面是后一种方法的步骤。
单击 Create SQL.。
接受默认的语句类型 (SELECT) 和开发过程(利用向导指导语句创建过程)。
选择 clients 表作为语句的目标。
在 Columns 选项卡下,在最终的结果集中包括两列。选择 names,然后选择 Add > Function > Next。在下一个窗口中,指定函数种类为 XML,XMLQuery 为函数签名。单击 Finish。
在 Conditions 选项卡下,构造 SQL WHERE 子句。指定 clients.status 作为列,等号 ("=") 作为操作符,:input 作为值。
修改产生的 SQL 语句以包含适当的路径表达式,用于检索 "contactinfo" 列中的第一个电子邮件地址。具体来说,将 XMLQUERY 行更改为读作:xmlquery('$c/Client/email[1]' passing contactinfo as "c")
解析查询以验证没有语法错误。
指定部署信息。具体来说,您会发现 Enable Debugging 很有帮助。
可选地,审查生成的 SQL 代码。单击 Show SQL(出现类似 图 2 中的代码)。
完成存储过程。单击 Finish。
图 2. 为处理 XML 数据的 SQL 存储过程产生的示例代码
部署和测试过程
创建好过程之后,现在就可以部署和测试它了。执行以下步骤:
部署过程。定位到 Data 项目中的过程,右击鼠标并选择 Deploy。接受默认设置并单击 Finish。右下角的 Data Output 窗格应该指出过程已经成功部署。
运行过程。定位到 Data 项目中的过程,右击鼠标并选择 Run。当出现提示时,为客户状态指定一个输入值(比如 "Gold" 或 "Silver")。单击 OK,并在 Data Output 窗格中查看存储过程的结果。
如果需要,您也可以在 Developer Workbench 外调用该存储过程。例如,如果已将过程命名为 "getInfo",那么您可以调用 DB2 命令行处理器,连接到数据库,并发出下面这个语句:
清单 19. 调用存储过程
call getInfo('Silver')
结束语
编写处理 DB2 XML 数据的 Java 应用程序涉及到使用熟悉的 JDBC 代码来执行查询和处理查询结果。IBM 为 DB2 提供一个基于 Eclipse 的 Developer Workbench 来帮助您编写、测试和调试代码。该工作台包括很多向导,可用于浏览数据库的内容,编写访问 XML 和非 XML 数据的存储过程,编写访问 XML 数据的 XQueries,以及编写访问 XML 和非 XML 数据的 SQL/XML 语句。