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

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

 2010-06-08 00:00:00 来源:WEB开发网   
核心提示: dRS 把更新和删除操作一并提交,运行完代码后立刻查看 autoinfo 表的变化吧,面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS(6),从 RDBMS 到 db4o 的更新dRS 支持双向数据同步,刚才我们已经看到单向是如何同步的,dRS 100% 的面向对象且基于 GPL 开

dRS 把更新和删除操作一并提交。运行完代码后立刻查看 autoinfo 表的变化吧。

从 RDBMS 到 db4o 的更新

dRS 支持双向数据同步,刚才我们已经看到单向是如何同步的,现在看看修改了 RDBMS 中的数据后如何反映到 db4o 里。

在继续写代码之前,讲讲前面提到的”type_id”字段,其实该字段是 dRS 在做维护的时候需要关注的。RDBMS 中有一个 dRS 自动生成的 drs_objects 表,该表维护了每条业务数据对应 db4o 中的类名、对应业务数据表的”type_id”、创建和修改时间。那么在 RDBMS 中修改了业务数据的值怎么通知 dRS 呢?答案是修改 drs_objects 表对应的修改时间,让该时间大于上次同步操作的时间,如何做?执行这样的 SQL 语句:update drs_objects t set t.modified=(select max(a.time)+1 from drs_history a) where t.typed_id=xxx,其中 xxx 代表你要修改的业务数据的”typed_id”,通过这个 SQL 语句,让我们知道了其实 dRS 记录同步操作时间是在 drs_history 表中,每次同步都会改变其中的值。

有了上面的认识接下来就好写了,首先修改 autoinfo 表中”type_id”为”454”的数据,把车牌号改为”川 D000003”,然后执行 SQL:update drs_objects t set t.modified=(select max(a.time)+1 from drs_history a) where t.typed_id=454,主动更新修改时间。

清单 5. updateDb4oReplication 方法

private static void updateDb4oReplication(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); 
  // 找出 B(Oracle 数据库 ) 中修改过的数据 
  ObjectSet changed = replication.providerB().objectsChangedSinceLastReplication(); 
  // 同步到 db4o 数据库 
  while (changed.hasNext()){ 
    replication.replicate(changed.next()); 
  } 
  replication.commit(); 
  replication.close(); 
  odb.close(); 
} 

运行 清单 5 中的代码,打开 OME 管理工具,可以看到刚才修改的数据已经被同步到了 db4o 中。正确,dRS 在 RDBMS 中找到了更新后的记录,而且修改时间是在上次同步之后,随即同步到 db4o 里。在理解了如何从 RDBMS 更新数据到 db4o 之后,相应的删除和新增操作也可通过类似的办法处理。

结论

通过上面的例子不难发现 dRS 使 db4o 的原生对象持久化体系能适用于所有的 Java 和 .NET 开发者,能够很好的处理和现有 RDBMS 的一致性,对于由此产生的数据冲突,dRS 也能很好的解决(请进一步参考 dRS 软件包中的开发文档)。dRS 100% 的面向对象且基于 GPL 开源授权,尤其适合敏捷企业开发和软件制造商的产品快速更替,以及大多数的移动业务环境。

本文示例源代码或素材下载

上一页  1 2 3 4 5 6 

Tags:面向 对象 数据库

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