在编写 CLI 程序时,XML 列的 SQL 数据类型是 SQL_XML,对于 C 程序,XML 列的默认数据类型是 SQL_C_BINARY。允许的转换包括 SQL_C_CHAR、 SQL_C_WCHAR 和 SQL_C_DBCHAR。XML 列的默认精度为 0,不过这是一个用于外部例程的定义长度。
IBM 不赞成为 DB2 9 使用 type 2 JDBC 驱动程序。它建议迁移到 IBM DB2 Driver for JDBC 和 SQLJ,后者是组合了 type 2 和 type 4 特性的一种驱动程序。它支持 Java Transaction Service (JTS)、Java Transaction API (JTA)、JDBC 3.0 API 和具有 JDBC 对等物的 SQLJ 功能。
要在 Java 中访问 DB2,开发人员可以通过 SQLJ 使用静态 SQL,还可以通过 JDBC 使用动态 SQL。Java 没有 XML 类型,所以调用 JDBC GetTypeInfo 元数据方法将报告 XML 列的类型为 java.sql.Types.OTHER。
通过使用 JDBC ResultSet.getXXX 方法,可以从列中检索整个 XML 列,或者一个序列。当使用 JDBC getXXX 方法检索 XML 数据时,数据是一种串行化字符串格式。getXXX 方法将以与方法名称相应的格式输出结果(例如 getAsciiStream)。对于 ResultSet.getObject,可以将对象强制转换为 DB2Xml 类型,将它赋给一个 DB2Xmlobject,并使用 DB2Xml.getDB2XXX 方法将数据输出为所需的类型。
一个增强的 Microsoft Visual Studio 2005 插件集包括对使用 DB2 9 中的 XML 数据构建和测试 .Net 应用程序的支持。DB2 提供了用于 OLE DB 和 ADO.Net 的提供程序,包括 DB2 .Net Data Provider、OLE DB .Net Data Provider 和 DB2 Data Provider for .Net Framework 2.0。OLE DB Provider 和 OLE DB .Net Data Provider 不支持新的 XML 类型。为了使用 ODBC .Net Data Provider 访问 XML 列,可以将它映射为 SQL_LONGVARCHAR。
使用 SQL 和 XQuery 的查询
正如 Storebrand 的 Thomassen 所说的那样,DB2 9 提供了使用 SQL、XQuery 或结合使用两者的能力。要对 SQL 和 XQuery 作一个详细的比较并非易事,所以可以想像一下集成这两种语言的复杂性。为了理解 XQuery,还必须掌握 W3C 各种规范(推荐标准)中定义的概念,包括名称空间、模式和 XPath 表达式。
SQL 与 XQuery 有相似之处,例如连接操作和用户定义函数,但是两者之间也有重大的区别。XQuery 只涉及二值逻辑,而 SQL 中还可能存在 null 值,因此它属于三值逻辑的范畴。XQuery 的名称比 SQL 更复杂,并且 XML 模式是可以演化的。XML 模式可以提供类型检查,但是 XQuery 可以对没有模式的文档进行操作。未来版本的 XQuery 规范中还将包括更新功能和全文搜索。
DB2 以不同的解析器为 XQuery 和 SQL 提供支持,并且不支持从 XQuery 到 SQL 的翻译。DB2 为这两种语言使用一个公共的查询编译器,对于用任意一种语言编写的查询,都会通过使用一个查询图来建模查询,为查询生成一个执行计划。在生成执行计划时,DB2 基于成本的优化器可以使用 XML 和关系索引。
SQL/XML 标准引入了一组用于操作 XML 数据实例的函数(XMLQUERY、 XMLEXISTS 和 XMLTABLE)。DB2 9 还使用以下函数:XMLParse、 XMLValidate、 XMLSerialize、 XMLCast。SQL/XML 标准引入了用于将关系数据转换为 XML 的函数。DB2 9 中的发布函数包括 XMLElement、XMLAttributes、XMLForest 和 XMLAgg。
Web 服务
自从在 2000 年揭开了 Web 服务的面纱以后,IBM 参与了一些规范和软件解决方案的开发,开发的目的是促进 SOA 被广泛采纳。Web 服务和网格服务使用 SOAP 在提供者和消费者之间交换 XML 编码的消息。Web 服务和网格服务使用一个被称作 Web 服务描述语言(WSDL)的 XML 词汇表来描述服务。DB2 包括一个 Web 服务提供程序,它可以使用 Web 服务。
由于 XML 对于 Web 服务和网格服务的运行是必不可少的一部分,因此 XML 处理的开销会引起性能方面的代价。DB2 的本地 XML 引擎、解析后的文档和带注释的模式将降低这种开销,因为它们可以减少交换 XML 编码的消息以及在磁盘上和消息队列中查询消息时的解析和验证工作。
DB2 有一个嵌入式应用服务器来运行随产品打包的 Web 服务。IBM 还开发了 Web Object Runtime Framework (WORF),这个软件支持使用 DB2 作为 Web 服务提供程序。WORF 可以为服务生成 WSDL,并且支持通过 HTTP GET、POST 和 SOAP 绑定访问服务。
WORF 支持多种从 DB2 数据库检索数据的模式。WORF 用户创建一个文档访问定义扩展(Document Access Definition Extension,DADX)文件,这是一个 XML 文件,其中描述了 XML 文档节点与关系数据之间的映射。DADX 文件支持 SQL 操作和使用 XML 集合的操作。如果不使用 WORF,那么就不得不编写代码来创建一个提供程序,包括生成 WSDL 服务描述。
学习曲线
采用 DB2 9 的开发人员和 DBA 将体验到一些新功能,这些新功能影响到数据访问 API、文档查询、SQL 语法、查询优化等。因此将会有一个学习曲线,但是新增的功能使 SOA、Web 服务、网格服务和文档管理应用程序更强大、更灵活,同时也更容易开发。
