`
flyPig
  • 浏览: 137034 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

db4o使用心得之二

阅读更多
3)delete,update对象
  把这两个操作放一起,是因为它们都跟一个东东:更新深度 有关系。
  对于更新,代码是很简单的,还是拿那个例子来看。
ObjectContainer db = Db4o.openFile("data.yap");
		try{				    	
			ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
	
				public boolean match(HttpConfig hc) {
			        return  hc.getName().equals("hankzhang");
			    }
			});
			HttpConfig httpConfig = result.next();
			//修改地址
			httpConfig.setIP("172.16.60.26");
			db.set(httpConfig);			
		}finally{
			db.close();
		}

  但是如果httpConfig对象里面有个成员变量不是基本的java类型,是个自定义的对象,比如有这么个属性
private TaskConfig config;
会发现,如下代码不能起到作用。
ObjectContainer db = Db4o.openFile("data.yap");
		try{				    	
			ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
	
				public boolean match(HttpConfig hc) {
			        return  hc.getName().equals("hankzhang");
			    }
			});
			HttpConfig httpConfig = result.next();
			//修改地址
			httpConfig.setIP("172.16.60.26");
			//修改内部自定义对象
			httpConfig.setTaskConfig(new TaskConfig());
			db.set(httpConfig);			
		}finally{
			db.close();
		}

即使设置了新的值,仍然修改不成功。这是因为 假设内部的成员对象比较复杂而且成员对象还能继续追溯下去,则更新一个对象,就需要对这些所有的对象都做更新,也就是 级联更新,这将引起很大的性能问题。因此默认情况下,只有基本的数据类型才会被修改到,如果确实要更新自定义的对象,就需要做级联设置。
//级联设置
Db4o.configure().objectClass(HttpConfig.class.getName()).cascadeOnUpdate(true);
		ObjectContainer db = Db4o.openFile("data.yap");
		try{				    	
			ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
	
				public boolean match(HttpConfig hc) {
			        return  hc.getName().equals("hankzhang");
			    }
			});
			HttpConfig httpConfig = result.next();
			//修改地址
			httpConfig.setIP("172.16.60.26");
			//修改内部自定义对象
			httpConfig.setTaskConfig(new TaskConfig());
			db.set(httpConfig);			
		}finally{
			db.close();
		}


删除对象,代码类似
ObjectContainer db = Db4o.openFile("data.yap");
		try{				    	
			ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
	
				public boolean match(HttpConfig hc) {
			        return  hc.getName().equals("hankzhang");
			    }
			});
			HttpConfig httpConfig = result.next();
			db.delete(httpConfig);	
		}finally{
			db.close();
		}

如果需要级联删除的话,就需要在最前面加上
Db4o.configure().objectClass(HttpConfig.class.getName()).cascadeOnDelete(true);


Db4o连接池
    这个东西db4o没有相应实现,而且存在很大的争议性。如果没有连接池,每次都要使用都要open,close数据库文件,而这两个操作恰好是非常频繁的;如果加入连接池,因为每个ObjectContainer都有自己的事务,所有的操作都有事务保证。当打开 ObjectContainer,就已经进入事务了,commit() 或 rollback() 时,下一个事务立即启动。每个 ObjectContainer 实例维护它自己所管理的已存储和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃。个人觉得,如果只是用来做本地应用的数据库,而且数据都是简单CURD操作,可以采取连接池的方式。
    要实现也是比较容易的,实现打开一定数量的ObjectContainer,用个List<ObjectContainer>来保存。每次都从list中取出实例来用,用完返回到池内。

ExtObjectContainer
ExtObjectContainer是ObjectContainer的子接口,它可以通过ObjectContainer实例的ext()方法得到。主要是进行一些其他的操作,比如getID(Object obj)得到对象的内部id,getObjectInfo(Object obj)得到对象的信息,getByID(long arg0)根据ID得到对象,getByUUID(Db4oUUID arg0)通过UUID得到对象,purge(Object obj)等。

ObjectManager
这个是db4o的数据库管理工具,个人感觉不是很好用,对于基本的只读查看操作,自己个人做个web页面工具,就像h2database那样的,还是比较麻烦的,希望开发团队在新版本能注意到这方面的问题。如下是这个工具的的截图,网上google出来的:


  • 大小: 46.8 KB
分享到:
评论

相关推荐

    db4o使用指南

    描述了db4o的信息要点和使用指南,讲述了一些特殊类,及其基本的使用

    Db4o的简单操作项目

    http://www.db4o.com db4o的官网,可下载最新版本,jar包在项目的database目录下,若构建路径报错请重新添加

    对象数据库db4o对象数据库db4o

    对象数据库db4o的示例程序,对象数据库db4o, 对象数据库db4o

    《DB4O系统应用之起步篇》

    《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.

    db4o8.0以及db4o中文指南

    db4o8.0以及db4o中文操作指南

    db4o中文指南

    db4o 是一个开源的纯面向对象数据库引擎,对于 Java 与 .NET 开发者来说都是一个简单易用的对象持久化工具,使用简单。同时,db4o 已经被第三方验证为具有优秀性能的面向对象数据库, 下面的基准测试图对 db4o 和...

    开源面向对象数据库 db4o 之旅

    该资源为 db4o 之旅 系列文章: 1.介绍了面向对象数据库 db4o 的基本特性,并且与传统关系型数据库以及 OR 映射技术做了比较分析,读者可以体验到 db4o 的全新的面向对象存储的理念,并且给出了性能测试数据。 2....

    db4o .net3.5

    db4o ,net db4o ,net db4o ,net db4o ,net

    DB4O-6.0

    For the fastest start with db4o please work through the tutorial, available in different formats in the following folder: ./doc/tutorial/ If you are working with db4o for Java, it is recommended...

    DB4O 说明文档

    DB4O 介绍信息.有兴趣的可以看看,了解一下.

    db4o .net2.0

    db4o .net2.0 db4o .net2.0db4o .net2.0 db4o .net2.0db4o .net2.0

    db4o 权威指南

    db4o 权威指南 pdf 非常好

    DB4O笔记+常用JAR包

    DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包 DB4O 笔记+常用 JAR包

    db4o-8.0-java

    db4o最后发布的版本,包含全部源码、jar包,eclipse下的对象查看插件、全部说明文档等。

    DB4O管理工具

    可以查看、删除DB4O数据库中的数据,支持*.yap、*.db、*.data等DB4O数据库

    db4o的ppt讲稿

    db4o 是一款开放源码对象导向数据库,能使 Java 和 .NET 开发人员不但大幅减低开发时间和成本, 同时能带来前所未有的效能. 另外, db4o 独有的对象导向数据库引擎能应用于免数据库管理人的流动装置或桌面平台, 套装...

    DB4O面向对象数据库使用指南

    DB4O面向对象数据库使用指南

    非常好的Db4o资料,适合想研究Db4o的同学

    非常好的Db4o资料,包括Db4o的七章内容详细介绍及相关的论文。

    db4o开发指南和各种实例

    本资料转自网上,仅供学习DB4O开发教程使用

    DB4O 8.0 Object Manager Enterprise

    DB4O 8.0 Object Manager Enterprise 对象浏览器,db4o-8.0-tutorial.pdf

Global site tag (gtag.js) - Google Analytics