WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 db4o 指南: 查询,更新和一... 阅读

面向 Java 开发人员的 db4o 指南: 查询,更新和一致性

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: 高级查询目前为止,您已经了解了如何查询单个的或者满足特定条件的对象,面向 Java 开发人员的 db4o 指南: 查询,更新和一致性(10),尽管这使得查询非常简单,但同时也有一些限制:比如,通过网络连接获取一百万行可能仍在 RDBMS 服务器能力之内,但是这将摧毁它所在的网络,如果需要检索所有

高级查询

目前为止,您已经了解了如何查询单个的或者满足特定条件的对象。尽管这使得查询非常简单,但同时也有一些限制:比如,如果需要检索所有姓氏以 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(); 

上一页  5 6 7 8 9 10 

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接