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

db4o使用心得之一

阅读更多
   db4o主要的包
   com.db4o: 是db4o最经常用到的功能,Db4o类和ObjectContainer接口是这个包最常用到的。Db4o是运行db4o数据库的起点,这个类中的静态方法openFile会以嵌入式的方式打开数据库文件,还可以在开启数据库之前进行 db4o 环境配置。ObjectContainer 接口可在单用户模式下作为数据库实例,也可作为 db4o 服务器的Client。每个 ObjectContainer 实例维护它自己所管理的已存储和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃.
   com.db4o.ext:这个包主要是提供比较高级点的功能。每个ObjectContainer 对象也是 com.db4o.ext.ExtObjectContainer对象,可以强转成ExtObjectContainer或者通过ext()方法,以获得更多高级特性。
   com.db4o.config: db4o 所需的配置方面的类。
   com.db4o.query:db4o的查询接口以及相关的Predicate类等。

   打开方式
   db4o的数据库文件后缀名是yap.可以用本地模式打开
ObjectContainer db = Db4o.openFile("data.yap");
在这种模式下,同时只能打开一个ObjectContainer,若打开多个会抛出com.db4o.DatabaseFileLockedException 异常,因此比较适合嵌入式的应用。
也可以用服务器模式打开
ObjectServer server=Db4o.openServer("data.yap",9002);//分别是数据库文件名、端口
server.grantAccess("root","root");//设定用户名、密码
然后就可以再客户端打开了
ObjectContainer oc = server.openClient()
或者直接连接
ObjectContainer db=Db4o.openClient("192.168.1.10",9002,"root","root");
.服务器模式下就可以打开多个client,可以用作J2EE应用环境,也可以做一个简单的db4o连接池来动态管理ObjectContainer。
 
   CURD操作
   1) set对象:假设有个pojo,如下
public class HttpConfig {	
	private int maxConnectPerHost;
	private int maxTotalConnections;
	private int connectTimeout;
      private String name;
      private String ip;
        .....

   保存这个对象只需要简单的
ObjectContainer db = Db4o.openFile("data.yap");
 db.set(httpConfig);

  2) read对象:db4o也有自己的查询方式,分别是QBE(Query by Example)、NQ(Native Queries)、SODA(Simple Object Database Access),接下来分别说下。
      QBE: 当利用 QBE 为 db4o 提供模板(example)对象时,db4o 将返回所有和非默认值字段匹配的全部对象,内部是通过反射所有的字段和构造查询表达式(所有非默认值字段结合”AND”表达式)来实现。比如查询name为"hankzhang"的所有HttpConfig对象
ObjectContainer db = Db4o.openFile("data.yap");
		try{
			//构造模板对象
			HttpConfig hc = new HttpConfig();
			hc.setName("hankzhang");
			//查询对象
			List<HttpConfig> list = db.get(hc);
			for(HttpConfig httpConfig : list) {
				System.out.println(httpConfig.getIP());
			}
	    	
		}finally{
			db.close();
		}

这种方式比较简单,但是也有明显的缺陷:
  1、必须反射模板对象(Example)的所有成员
  2、无法执行更进一步的查询表达式(例如 AND、OR、NOT 等等)
  3、不能指定约束值 0(int)、""或者 null(对象)等。

      SODA:SODA是db4o最底层的查询API,目前SODA中使用字符串来定义字段,这样将不能实现类型安全也无法在编译时检查代码,而且写起来较麻烦.同上的例子,用SODA来做就是
ObjectContainer db = Db4o.openFile("data.yap");
		try{
			//查询对象
			Query query = db.query();
			//设置被约束实例
			query.constrain(HttpConfig.class);
			//设置被约束实例的字段和约束条件
			query.descend("name").constrain("hankzhang");
			ObjectSet<HttpConfig> list = query.execute();
			for(HttpConfig httpConfig : list) {
				System.out.println(httpConfig.getIP());
			}
	    	
		}finally{
			db.close();
		}

Query对象的API内有:sortBy(按字段排序)和 orderAscending(顺序)、orderDescending (逆序)等方法。

      NQ:使用NQ,可以保证我们的查询代码是完全的编译期错误检查、类型安全甚至重构。还是上面的例子
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");
			    }
			});
			for(HttpConfig httpConfig : list) {
				System.out.println(httpConfig.getIP());
			}
			
		}finally{
			db.close();
		}

在db4o内部,会设法把NQ转换成 SODA。

说到查询就不能忘了最常见的分页了,分页的做法简单到不可思议。
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");
			    }
			});
			//记录总数
			int count = result.size();
			//每页三条,分4页,为了方便,假设count大于3*4
	    	for(int i = 0; i < 4; i++){
	    		System.out.println(i + "Page:" + result.get(i*3).getIP());
	    		System.out.println(i + "Page:" + result.get(i*3+1).getIP());
	    		System.out.println(i + "Page:" + result.get(i*3+2).getIP());
			}
			
		}finally{
			db.close();
		}

不要以为写错了,虽然取得了list实例,但是list内只是httpconfig对象在数据库内部的id号而已,只有result.get(i*3).getIP()这样的操作之后,才会去根据id获取真正的对象。







分享到:
评论

相关推荐

    db4o使用指南

    "db4o 使用指南" db4o 是一个开源的面向对象数据库,能够轻松地将 Java 对象持久化到数据库中。本文将详细介绍 db4o 的安装、启动、...db4o 是一个功能强大且易于使用的面向对象数据库,能够满足各种应用场景的需求。

    Db4o的简单操作项目

    Db4o,全称为“Database for Objects”,是一个开源的对象数据库管理系统,主要应用于Java和.NET平台。这个项目专注于提供一种简单的方式来存储和检索Java对象,无需SQL或其他中间映射层。在“Db4o的简单操作项目”...

    db4o 权威指南

    总的来说,《db4o 权威指南》是一本全面覆盖db4o特性和实践的资源,对于想要深入理解和使用db4o的Java开发者来说,是一份宝贵的参考资料。通过阅读这本书,开发者能够掌握面向对象数据库的核心概念,提升开发效率,...

    db4o8.0以及db4o中文指南

    db4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接将Java或.NET对象存储到数据库中,无需进行ORM(对象关系映射)。db4o的目标是简化数据管理,提供更接近自然编程的方式,使开发过程更加...

    db4o-8.0-java

    **db4o(Database for Objects)** 是一个开源的对象数据库管理系统(Object-Relational Mapping,ORM),它允许开发者直接在Java或.NET平台上存储和检索Java对象或.NET对象,无需进行SQL查询或者映射过程。db4o的...

    《DB4O系统应用之起步篇》

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

    db4o-7.12-tutorial

    #### 一、db4o简介与安装 db4o是一款开源的对象数据库系统,支持Java、.NET 和 Mono等平台。本教程旨在帮助用户快速掌握db4o的基本用法,并提供丰富的资源以支持开发者深入学习。 在开始之前,请确保从db4o官方...

    db4o .net3.5

    db4o(Database for Objects)是一个开源的对象数据库系统,专注于在.NET Framework 3.5环境下存储和检索对象。它允许开发者直接使用.NET类作为数据库模型,无需进行传统的映射过程,极大地简化了数据管理。这个标题...

    db4o for java

    3. **对象查询**:db4o使用一种称为OQL(Object Query Language)的查询语言,它是对SQL的面向对象扩展。OQL允许开发者根据对象的属性和关系进行查询,使得数据检索更加直观和高效。 4. **版本控制**:db4o支持对象...

    db4o开发指南和各种实例

    通过NQ,可以方便地实现对对象属性的匹配,如查询所有年龄大于30的人,只需创建一个年龄为30的对象,然后使用db4o的query()方法进行查找。 **三、SDOA(SODA - Simple Object Database Access)** SDOA是db4o提供的...

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

    在`DrawTools2005`这个示例程序中,可能展示了如何使用db4o来存储和检索图形工具相关的对象。例如,可能会有一个`Shape`类,包含位置、大小、颜色等属性,以及一个`Drawing`类,包含多个`Shape`对象。开发者可以轻松...

    db4o中文指南

    db4o是一个专为Java和.NET开发者设计的开源、轻量级的纯面向对象数据库引擎,提供了一种简单易用的方式来实现对象持久化。这款数据库引擎已被验证具备优秀的性能,根据描述中的基准测试,db4o在与传统持久化方案的...

    DB4O笔记+常用JAR包

    DB4O,全称为“Database for Objects”,是一个开源的对象数据库管理系统(ODBMS),它允许开发者直接将Java或.NET对象持久化到磁盘上,而无需使用传统的关系型数据库中的SQL语句。DB4O提供了简单、高效且灵活的数据...

    DB4O Java开发应用

    - 打开一个DB4O库:首先,你需要创建一个`Configuration`实例,并使用`Db4o.openServer()`或`Db4o.openClient()`方法来连接或打开数据库。这通常涉及到指定数据库的URL、端口以及配置参数。 - 存储对象:使用`...

    db4o的ppt讲稿

    db4o(又名Database for Objects)是一款开源的对象导向数据库系统,专为Java和.NET开发者设计,旨在简化开发流程并提升性能。它的核心特性在于其对象导向数据库引擎,允许开发者直接使用编程语言中的对象进行数据...

    DB4O管理工具

    DB4O(Database for Objects)是一款开源的对象数据库管理系统(Object-Relational Mapping,ORM),它允许开发者将Java或.NET对象直接存储到磁盘上,无需转换为传统的表和列的结构。DB4O的设计理念是简化数据存储,...

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

    2. **透明性**:Db4o的设计目标之一是尽可能减少数据库操作对代码的影响。开发者可以像操作普通对象一样操作持久化的对象,无需额外的API调用或SQL语句。 3. **查询API**:Db4o提供了强大的查询机制,包括激活查询...

    DB4o 数据库实例

    DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接将对象持久化到数据库中,无需进行额外的映射或者数据访问层(DAL)的开发。这个数据库系统设计的目标是简化对象关系映射(ORM)的过程,...

    db4o-5.0-tutorial-java帮助

    总之,db4o-5.0-tutorial-java帮助文档不仅是一份详细的使用指南,也是新老开发者掌握db4o技术的重要参考资料。无论是初学者还是有经验的开发者,都能从中获得有价值的信息,加速学习进程,提高工作效率。

Global site tag (gtag.js) - Google Analytics