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(); } }
查找操作比较麻烦一些,我会在下一个博文里面讲。