快速业务通道

Java理论与实践:在没有数据库的情况下进行数据库查询 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
数据库有多烦人

HSQLDB 方法是一个可行方法,但您很快就发现,我必须为对象关系的不匹配 而两次(而不是一次)受罚 —— 一次是在将树型结构数据库转换为关系数据模 型时,一次是在将平面关系查询结果转换成结构化的 XML 或者 HTML 结果集时 。此外,将 JDBC ResultSet 后处理为 DOM 表示形式的 XML 或者 HTML 文档也 不是一项很容易的任务,需要为每一个报告提供一些定制的编码。因此虽然内存 中的 SQL 数据库 的确 可以简化查询,但是从数据库中存入和取出数据所需要 的额外代码会抵消所有节省的代码。

让 XQuery 来拯救您

另一个容易得到的数据查询方法是 XQuery。XQuery 的优点是,它是为生成 XML 或者 HTML 文档作为查询结果而设计的,因此不需要对查询结果进行后处理 。这种想法很有吸引力 —— 每个报告只有一层编码,而不是两层或者更多层。 因此第一项任务是构建一个表示整个数据集的 XML 文档。设计一个简单的 XML 数据模型和编写遍历数据结构,并将每一个元素附加到一个 DOM 文档中的 Visitor 很简单。(不需要写出这个文档。可以将它保持在内存中,用于查询, 然后在完成查询时丢弃它。当底层数据改变时,可以重新生成它。)之后,所有 要做的就是编写 XQuery 查询,该查询将选择并聚集用于报告的数据,并按最终 需要的格式(XML 或 HTML)对它们进行格式化。查询可以存储在单独的文件中 ,以便进行快速原型制造,因此,可支持多种报告格式。使用 Saxon 评估查询 的代码如清单 4 中所示:

清单 4. 执行 XQuery 查询并将结果序列化为 XML 或 HTML 文档的代码

String query = readFile(queryFile + ".xq");   Configuration c = new Configuration();   StaticQueryContext qp = new StaticQueryContext(c);   XQueryExpression xe = qp.compileQuery(query);   DynamicQueryContext dqc = new DynamicQueryContext(c);   dqc.setContextNode(new DocumentWrapper(document, z.getName(), c));   List result = xe.evaluate(dqc);   FileOutputStream os = new FileOutputStream(fileName);   XMLSerializer serializer = new XMLSerializer (os, format);   serializer.asDOMSerializer();   for(Iterator i = result.iterator(); i.hasNext(); ) {     Object o = i.next();     if (o instanceof Element)       serializer.serialize((Element) o);     else if (o instanceof Attr) {       Element e = document.createElement("scalar");       e.setTextContent(((Attr) o).getNodeValue());       serializer.serialize(e);     }     else {       Element e = document.createElement("scalar");       e.setTextContent(o.toString());       serializer.serialize(e);     }   }   os.close();

Java理论与实践:在没有数据库的情况下进行数据库查询(3)

时间:2010-12-20 IBM Brian Goetz

表示数据库的 XML 文档的结构与内存中的数据结构稍有不同,每一个 <site> 元素都有嵌套的 <page> 元素,每一个 <page> 元 素都有嵌套的 <link> 元素,而每一个 <link> 元素都有 <link-to> 和 <link-from> 元素。实践证明,这种表示方法对于 大多数报告都很方便。

清单 5 显示了一个示例 XQuery 报告,这个报告处理链接的选择、分类和表 示。它有几个地方优于 Visitor 方法 —— 不仅代码少(因为查询语言支持选 择、聚积和分类),而且所有报告的代码 —— 选择、聚积、分类和表示 —— 都在一个位置上

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号