`
flyPig
  • 浏览: 137043 次
  • 性别: 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的简单操作项目

    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的ppt讲稿

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

    db4o-8.0-java

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

    DB4O管理工具

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

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

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

    DB4O完整教程

    db4o是一个开源的纯面向对象数据库引擎,对于Java与.NET开发者来说都是一个简单易用的对象持久化工具,使用简单

    db4o开发指南和各种实例

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

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

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

Global site tag (gtag.js) - Google Analytics