面向 Java 开发人员的 db4o 指南: 查询,更新和一致性
2010-04-01 00:00:00 来源:WEB开发网高级查询
目前为止,您已经了解了如何查询单个的或者满足特定条件的对象。尽管这使得查询非常简单,但同时也有一些限制:比如,如果需要检索所有姓氏以 G 开头的 Person,或者所有年龄大于 21 的 Person,该怎么办?QBE 方法对于这类查询无能为力,因为 QBE 只能执行相等匹配,而无法进行比较查询。
通常,即使是中等复杂程度的比较对于 OODBMS 也是一种弱点,而这正是关系模型和 SQL 的长处。在 SQL 中执行比较查询非常简单,但是在 OODBMS 中执行同样的查询却需要一些不是很吸引人的方法:
获取所有对象并自行执行关系比较。
扩展 QBE API 以包含谓词。
创建一种能够被转换为查询您的对象模型的查询语言。
薄弱的比较查询
很明显,上面所述的第一种方法只能用于最普通的数据库,因为它对能够在实际中使用的数据库的规模有很明显的上限。取回一百万个对象不成问题,甚至可以很轻松地处理最困难的硬件,尤其是当跨越网络连接时。(这不是对 OODBMS 的控告,顺便提一下,通过网络连接获取一百万行可能仍在 RDBMS 服务器能力之内,但是这将摧毁它所在的网络。)
第二种方法破坏了 QBE 方法的简单性,并且导致了如清单 9 所示的糟糕代码:
清单 9. 使用了谓词的 QBE 调用
Query q = new Query();
q.setClass(Person.class);
q.setPredicate(new Predicate(
new And(
new Equals(new Field("firstName"), "David"),
new GreaterThan(new Field("age"), 21)
)));
q.Execute();
更多精彩
赞助商链接