DB4O学习笔记,结合一个小Demo(1)

    DB4O是什么呢?(官网:http://www.db4o.com/ ,其实官网的教程非常详细了,不过是英文版的)其实就是一种面向对象的数据库,因为现在的主流的数据库都是关系型数据库(很多关系型数据库已经开始支持一些面向对象的特性),DB4O的简单介绍可以参考百科介绍(很短的)http://baike.baidu.com/view/1307505.htm,本博文以一个Demo进行DB4O的学习。

    补充:已经在第二篇博文最后添加了整个Eclipse项目下载的链接(金山快盘)

    下面的每个类都可以单独运行。需要注意的是再插入对象的时候,他没有主键的概念,只有对象的概念,所以,如果DBInsert类你运行两次的话,会插入六个对象(因为每次是三个对象,虽然他们的属性都一样,但是你是新new的对象,所以DB4O不会处理,这个可以自己通过在插入时进行判断来解决),DB4O里面存储的是你运行代码的时候插入的那个对象,这一点一定要记住。

 1.People.java

    先创建一个People类,这个人有id,名字,地址三个属性。

package com.lsw.bean;

public class People {
    public People() {
    }

    public People(Integer id, String name, String address) {
        super();
        this.id = id;
        this.name = name;
        this.address = address;
    }

    public People(Integer id) {
        super();
        this.id = id;
    }

    private java.lang.Integer id;
    private java.lang.String name;
    private java.lang.String address;

    public java.lang.Integer getId() {
        return id;
    }

    public void setId(java.lang.Integer id) {
        this.id = id;
    }

    public java.lang.String getName() {
        return name;
    }

    public void setName(java.lang.String name) {
        this.name = name;
    }

    public java.lang.String getAddress() {
        return address;
    }

    public void setAddress(java.lang.String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "[" + id + "/" + name + "/" + address + "]";
    }

}

2.Constants.java

  这个类是常量类,里面只有一个常量,是数据库的名字(DB4O的数据库后缀名为.yap)

package com.lsw.util;

public class Constants {
    public static final String DB4O_FILENAME="people.yap";
}

3.然后开始对数据库进行各种操作了:

  1)首先进行数据库的插入操作(因为打开和创建数据库十分简单,就一句话,所以不用考虑为什么不是先创建数据库,创建或打开数据库如下面第一个语句,如果数据库存在则打开,否则创建),插入操作是直接插入对象的:store()方法。

package com.lsw.tool;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.lsw.bean.People;
import com.lsw.util.Constants;

public class DBInsert {

    public static void main(String[] args) {
        // 打开数据库
        ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), Constants.DB4O_FILENAME);
        try {
            // 构造 People 对象
            People peo = new People(1);
            peo.setAddress("成都市");
            peo.setName("张三");
            // 保存对象
            db.store(peo);
            People peo2 = new People();
            peo2.setId(2);
            peo2.setAddress("上海");
            peo2.setName("李斯");
            db.store(peo2);
            People peo3 = new People(3, "小杜甫", "河北");
            db.store(peo3);
        } finally {
            // 关闭连接
            db.close();
        }
    }

}

  2)更新操作

  上面插入了三个对象,下面进行更新操作,更新操作和删除操作都需要首先将该对象从数据库中调出来,然后进行更新操作,对更新操作来说,DB4O其实没有一个专门更新的方法,我们只需要首先根据条件(如你作为主键的字段)将需要的对象找出来,然后修改完成后,在进行store操作(保存),对于删除来说,也是找出来以后直接进行删除操作。

  (1)更新对象

package com.lsw.tool;

import java.util.List;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.lsw.bean.People;
import com.lsw.util.Constants;

public class DBUpdate {
    /**
     * 更新和检索必须都先把对象检索出来然后进行操作
     * @param db
     */
    public static void update(ObjectContainer db) {
        List<People> result = db.queryByExample(new People(1));
        People people; // 这里根据ID检索,最多一条结果
        if (result != null && result.size() > 0) {// 有检索结果
            people = result.get(0);
            System.out.println("更新前的值:" + people);
            // 更新这条记录
            people.setId(4);
            people.setName("张思");
            people.setAddress("弘博");
            db.store(people);
            // 查看更新后的结果
            DBQuery.queryAll(db);
        } else {
            System.out.println("没有检索到任何记录.");
        }

    }

    public static void main(String[] args) {
        ObjectContainer db = Db4oEmbedded.openFile(Constants.DB4O_FILENAME);
        update(db);
        db.close();
    }
}

  (2)删除对象

  

package com.lsw.tool;

import com.db4o.Db4oEmbedded;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.lsw.bean.People;
import com.lsw.util.Constants;

public class DBDelete {
    public static void delete(ObjectContainer db) {
        System.out.println("删除前:");
        DBQuery.queryAll(db);
        ObjectSet<People> result = db.queryByExample(new People(2));
        People p = result.next();
        if (p != null) { // 首先确保你要删除的对象存在
            db.delete(p);
        }
        System.out.println("删除后:");
        DBQuery.queryAll(db);
    }

    public static void main(String[] args) {
        ObjectContainer db = Db4oEmbedded.openFile(Constants.DB4O_FILENAME);
        delete(db);
        db.close();

    }
}

 查找操作比较麻烦一些,我会在下一个博文里面讲。

posted @ 2012-12-08 18:09  天外的星星  阅读(921)  评论(0编辑  收藏  举报