扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:天狼 来源:希赛网 2008年2月26日
关键字: DB2
在本页阅读全文(共2页)
至此,已经建立了 DB2 连接并注册了 XML 模式,现在可以编写 SQL INSERT 或 UPDATE 语句,以便将新的 XML 数据插入到包含 XML 列的表中,并在插入 XML 数据之前,让 DB2 验证 XML 数据。DB2 可以存储最大为 2GB 的格式良好的任何 XML 文档。清单 6 展示了将一行插入到 CARPOOL 表中的一种方法。在这个例子中,插入到 CARPOOLINFO 列的 XML 文档是从字符串读取的。
清单 6. 插入和更新 XML 数据的方法
// Update the database based on the user's action in the dataGrid. // Performs INSERT, UPDATE and DELETE. private void update() { mydataSourceDT = carpoolInfo.DataSource as DataTable; dtChanges = mydataSourceDT.GetChanges(); if (dtChanges == null) return; // Need to generate insert/update/delete commands to //validate against // carpoolinfo.xsd DB2Command insert = new DB2Command ("INSERT INTO CARPOOL" + "(FIRSTNAME,LASTNAME,TITLE,PHONE,CARPOOLINFO)" + " VALUES(?,?,?,?," + "XMLVALIDATE(xmlparse (DOCUMENT CAST" + " ( ? as CLOB) PRESERVE WHITESPACE )" + "ACCORDING TO XMLSCHEMA ID " + schema + ".CARPOOLINFO ))"); DB2Command update = new DB2Command ("UPDATE CARPOOL SET FIRSTNAME=?,LASTNAME=?,TITLE=?,PHONE=?," + "CARPOOLINFO=XMLVALIDATE(xmlparse (DOCUMENT CAST " + "( ? as CLOB) PRESERVE WHITESPACE ) " + "ACCORDING TO XMLSCHEMA ID " + schema + ".CARPOOLINFO ) WHERE ID=?"); DB2Command delete = new DB2Command ("DELETE FROM CARPOOL WHERE ID=?"); //Add the Parameters and bind them to the DataTable's //corresponding columns. DB2Parameter fn1 = new DB2Parameter("fn1", DB2Type.VarChar); DB2Parameter fn2 = new DB2Parameter("fn2", DB2Type.VarChar); fn1.SourceColumn = "FIRSTNAME"; fn2.SourceColumn = "FIRSTNAME"; insert.Parameters.Add(fn1); update.Parameters.Add(fn2); DB2Parameter ln1 = new DB2Parameter("ln1", DB2Type.VarChar); DB2Parameter ln2 = new DB2Parameter("ln2", DB2Type.VarChar); ln1.SourceColumn = "LASTNAME"; ln2.SourceColumn = "LASTNAME"; insert.Parameters.Add(ln1); update.Parameters.Add(ln2); DB2Parameter tl1 = new DB2Parameter("tl1", DB2Type.VarChar); DB2Parameter tl2 = new DB2Parameter("tl2", DB2Type.VarChar); tl1.SourceColumn = "TITLE"; tl2.SourceColumn = "TITLE"; insert.Parameters.Add(tl1); update.Parameters.Add(tl2); DB2Parameter ph1 = new DB2Parameter("ph1", DB2Type.VarChar); DB2Parameter ph2 = new DB2Parameter("ph2", DB2Type.VarChar); ph1.SourceColumn = "PHONE"; ph2.SourceColumn = "PHONE"; insert.Parameters.Add(ph1); update.Parameters.Add(ph2); DB2Parameter info1 = new DB2Parameter("info1", DB2Type.Clob); DB2Parameter info2 = new DB2Parameter("info2", DB2Type.Clob); info1.SourceColumn = "CARPOOLINFO"; info2.SourceColumn = "CARPOOLINFO"; insert.Parameters.Add(info1); update.Parameters.Add(info2); DB2Parameter i1 = new DB2Parameter("i1", DB2Type.Integer); i1.SourceColumn = "ID"; update.Parameters.Add(i1); DB2Parameter i2 = new DB2Parameter("i2", DB2Type.Integer); i2.SourceColumn = "ID"; delete.Parameters.Add(i2); da.InsertCommand = insert; da.UpdateCommand = update; da.DeleteCommand = delete; // Perform the update. da.Update(dtChanges); mydataSourceDT.AcceptChanges(); // Refill the dataset, refresh the dataGridView. ds.Clear(); da.Fill(ds, xsdname); } |
查询 XML 数据
至此,已经将数据存储在 CARPOOLINFO 表中,现在可以查询这个表。DB2 允许编写不同类型的查询来提取关系数据和 XML 数据。例如可以编写一个简单的查询来检索整个 XML 文档,或者编写一个基于 XML 和关系查询谓词检索 XML 文档某些部分的查询。本文演示一个这样的查询:
本文使用 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 // <City>cityName</City> 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]; } } |
结束语
IBM DB2 使程序员可以用熟悉的 SQL 语句更新和删除 XML 数据。为了更新和删除存储在 DB2 中的 XML 数据,可以使用 SQL UPDATE 和 DELETE 语句。这些语句可以包括 SQL/XML 函数,这种函数可根据 XML 列中存储的 XML 元素的值来限制目标行和列。例如,可以删除包含居住在特定城市的合伙用车者的相关信息的行,或者只更新合伙用车的开始时间在某个给定时间段内的合伙用车者的 XML(和非 XML 数据)。由于在 UPDATE 和 DELETE 语句中使用 SQL/XML 函数的语法与在 SELECT 语句中使用这些函数的语法相同,因此不再给出完整的代码示例。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者