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

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

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: db4o 容器在这里并没有出现一致性问题,这是因为有问题的对象已经被标识为来自数据库的对象,面向 Java 开发人员的 db4o 指南: 查询,更新和一致性(8),即它的 OID 已经被存储在 db4o bookkeeping 基础设施中,相应地,完成这些操作后,对 db4o 数据库调用 get

db4o 容器在这里并没有出现一致性问题,这是因为有问题的对象已经被标识为来自数据库的对象,即它的 OID 已经被存储在 db4o bookkeeping 基础设施中。相应地,当调用 set 时,db4o 将会更新现有的对象而不是插入新对象。

一种搜索实用方法

特定于应用程序主键的概念值得经常注意,即使它没有继承 QBE 的概念。您所需要的是使用一种实用方法简化基于标识的搜索。这一节将展示基于 Reflection API 用法的解决方案,我们会将正确的值放在正确的字段,此外,还介绍了针对不同选择和外观对解决方案进行调优的方法。

让我们从一个基本前提开始:我具有一个数据库,其中包含我希望根据一组具有特定值的字段查询的类型(Person)。在这种方法中,我对 Class 使用了 Reflection API,创建了该类型的新实例(调用其默认构造方法)。然后遍历具有这些字段的 String 数组,取回 Class 中的每个 Field 对象。随后,遍历对应于每个字段值的对象数组,然后调用 Field.set() 将该值放入我的模板对象中。

完成这些操作后,对 db4o 数据库调用 get() 并查看返回的 ObjectSet 是否包含任何对象。这给出了一个基本方法的大概轮廓,如清单 6 所示:

清单 6. 执行 QBE 一致性搜索的实用方法

        import java.lang.reflect.*; 
import com.db4o.*; 
 
public class Util 
{ 
  public static boolean identitySearch(ObjectContainer db, Class type, 
    String[] fields, Object[] values) 
      throws InstantiationException, IllegalAccessException, 
        NoSuchFieldException 
  { 
      // Create an instance of our type 
      Object template = type.newInstance(); 
       
      // Populate its fields with the passed-in template values 
      for (int i=0; i<fields.length; i++) 
      { 
        Field f = type.getDeclaredField(fields[i]); 
        if (f == null) 
          throw new IllegalArgumentException("Field " + fields[i] + 
            " not found on type " + type); 
        if (Modifier.isStatic(f.getModifiers())) 
          throw new IllegalArgumentException("Field " + fields[i] + 
            " is a static field and cannot be used in a QBE query"); 
        f.setAccessible(true); 
        f.set(template, values[i]); 
      } 
       
      // Do the query 
      ObjectSet set = db.get(template); 
      if (set.hasNext()) 
        return true; 
      else 
        return false; 
  } 
} 

上一页  3 4 5 6 7 8 9 10  下一页

Tags:面向 Java 开发

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