面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS
2010-06-08 00:00:00 来源:WEB开发网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 开源授权,尤其适合敏捷企业开发和软件制造商的产品快速更替,以及大多数的移动业务环境。
本文示例源代码或素材下载
- ››数据库对象——存储过程
- ››数据库设计词汇对照表
- ››面向对象的JS-私有成员变量实现方式
- ››数据库大型应用解决方案总结
- ››面向对象的JavaScript (一、对象基础,使用函数来...
- ››面向对象数据库 db4o 之旅,第 4 部分: 使用 dRS
- ››对象存储不给高性能计算添堵
- ››面向 Java Web 应用程序的 OpenID,第 2 部分: 为...
- ››面向 Java 开发人员的 db4o 指南: 简介和概览
- ››面向 Java 开发人员的 db4o 指南: 查询,更新和一...
- ››面向 Java 开发人员的 db4o 指南: db4o 中的数据库...
- ››面向 Java 开发人员的 db4o 指南: 超越简单对象
更多精彩
赞助商链接