WEB开发网
开发学院软件开发Java 面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS 阅读

面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS

 2010-06-08 00:00:00 来源:WEB开发网   
核心提示: 在”createReplication” 方法中,通过 HibernateReplication 类的 begin(odb, config) 方法,面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS(5),把 db4o 和 Hibernate 的配置实例联系到一

在”createReplication” 方法中,通过 HibernateReplication 类的 begin(odb, config) 方法,把 db4o 和 Hibernate 的配置实例联系到一起;接下来向 db4o 中创建一个 People 对象和 10 个 AutoInfo 对象,并提交到 db4o;最后找出哪些是 db4o 中存在而 RDBMS 却没有的数据,把这些数据委托给 dRS,让 dRS 复制到 RDBMS。请注意代码注释中 A (db4o 数据库 ) B (Oracle 数据库 ) 的含义和关系。运行完代码后,可以发现 Oracle 中有了新数据,参看 图 3、4。

图 3. people 表
面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS

图 4. autoinfo 表
面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS

从 db4o 到 RDBMS 的更新与删除

现在来看看如何进行更新和删除。注意 清单 4中的代码,在 updateOraReplication 方法中,首先通过 QBE 查询把车牌号为”川 A000001”的 AutoInfo 对象查出来,然后改成”川 B000001”提交到 db4o,随后 dRS 发现有条数据被修改,找出来之后更新到 RDBMS;同样,通过 QBE 查询把车牌号为”川 A000002”的 AutoInfo 对象查出来,删除后提交到 db4o,最后使用 ReplicationSession 实例的 replicateDeletions(AutoInfo.class) 方法来通知 dRS 对删除数据进行处理。

清单 4. updateOraReplication 方法

private static void updateOraReplication(com.db4o.config.Configuration db4oconf){ 
  ObjectContainer odb = Db4o.openFile(db4oconf, "auto.yap"); 
  Configuration config = new Configuration().configure("hibernate.cfg.xml"); 
  // 绑定 A(db4o 数据库 ) B(Oracle 数据库 ) 关系 
  ReplicationSession replication = HibernateReplication.begin(odb, config); 
  // 更新 
  AutoInfo ai = new AutoInfo(); 
  ai.setLicensePlate("川 A000001"); 
  List<AutoInfo> list = odb.queryByExample(ai); 
  if(list.size() == 1){   
    ai = list.get(0); 
    ai.setLicensePlate("川 B000001"); 
    odb.store(ai); 
  } 
  odb.commit(); 
  // 找出 A(db4o 数据库 ) 中修改过的数据 
  ObjectSet changed = replication.providerA().objectsChangedSinceLastReplication(); 
  // 更新到 Oracle 数据库 
  while (changed.hasNext()){ 
    replication.replicate(changed.next()); 
  } 
  // 删除 
  ai = new AutoInfo(); 
  ai.setLicensePlate("川 A000002"); 
  list = odb.queryByExample(ai); 
  if(list.size() == 1){ 
    odb.delete(list.get(0)); 
  } 
  odb.commit(); 
  replication.replicateDeletions(AutoInfo.class); 
  replication.commit(); 
  replication.close(); 
  odb.close(); 
} 

上一页  1 2 3 4 5 6  下一页

Tags:面向 对象 数据库

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