DB2 VS2005.Net插件进行XML数据验证(4)

http://www.itjxue.com  2015-07-17 12:13  来源:未知  点击次数: 

  查询 XML 数据

 

  至此,已经将数据存储在 CARPOOLINFO 表中,现在可以查询这个表。DB2 允许编写不同类型的查询来提取关系数据和 XML 数据。例如可以编写一个简单的查询来检索整个 XML 文档,或者编写一个基于 XML 和关系查询谓词检索 XML 文档某些部分的查询。本文演示一个这样的查询:

  1.   基于 XML 谓词过滤数据
  2.   检索符合条件的 XML 文档的某些部分,以及存储在传统 SQL 列中的数据

  本文使用 DB2 的 XMLExists() 函数。本文中的示例应用程序使用 XMLExists() 来演示一个常见的编程任务:检索 XML 文档的某些部分。清单 7 中显示的例子返回居住在旧金山或圣何塞的合伙用车者的合伙用车信息。这个例子同时投影和限制传统的 SQL 数据和 XML 数据。

  清单 7. 查询 XML 数据

  // Populate the dataGrid.

  // If "All" is selected, all data from the table will be displayed.

  // if a city's name is selected, only rows whose CARPOOLINFO contain

  // cityName will be displayed.

  public void populate(String cityName)

  {

  if ( cityName.Equals("All"))

  {

  carpoolInfo.DataSource = ds.Tables[xsdname];

  }

  else

  {

  xq = "select * from CARPOOL where " +

  "xmlexists('declare namespace

  def=\"http://tempuri.org/XMLSchema.xsd\";" +

  "$c/def:CARPOOLINFO/def:Address[def:City=" + "\"" + cityName +

  "\"]' passing CARPOOL.CARPOOLINFO as \"c\")" +

  "order by ID";

  DB2DataAdapter da1 = new DB2DataAdapter(xq, m_conn);

  DataSet ds1 = new DataSet();

  da1.Fill(ds1, xsdname);

  carpoolInfo.DataSource = ds1.Tables[xsdname];

  }

  }

  WHERE 子句使用 DB2 的 XMLExists() 函数限制查询所返回的数据。它规定,返回的 XML 文档只包括在 CARPOOLINFO 的 city 为某个值(San Francisco 或 San Jose)的行中的那些 XML 文档。在这个示例查询中,XMLExists() 指示 DB2 判断一个给定的 XML 文档是否包含一个包括指定城市的 CARPOOL 地址。PASSING 子句指定 XML 文档所在的位置(在 carpoolinfo 列中)。

  结束语

  IBM DB2 使程序员可以用熟悉的 SQL 语句更新和删除 XML 数据。为了更新和删除存储在 DB2 中的 XML 数据,可以使用 SQL UPDATE 和 DELETE 语句。这些语句可以包括 SQL/XML 函数,这种函数可根据 XML 列中存储的 XML 元素的值来限制目标行和列。例如,可以删除包含居住在特定城市的合伙用车者的相关信息的行,或者只更新合伙用车的开始时间在某个给定时间段内的合伙用车者的 XML(和非 XML 数据)。由于在 UPDATE 和 DELETE 语句中使用 SQL/XML 函数的语法与在 SELECT 语句中使用这些函数的语法相同,因此不再给出完整的代码示例。

(责任编辑:IT教学网)

更多

推荐其他WEB语言文章