当你想要快速的开发系统原型,用于演示功能、探索需求、消除风险时,用db4o吧;
当你的程序的数据量不算特别大,而又想最快的提高开发速度时,用db4o吧;
当你不想在程序的可配置信息的存储、解析上花费时间时,用db4o吧;
当你不懂SQL也不想学SQL时,用db4o吧。
Db4o是对象数据库,有java和.net两个分支。这里没有SQL,没有表,一切都是原生对象。官方网站对Db4o的描述是:
•完全原生于Java和.NET
•100% 面向对象, 抛开对象-关系映射
•为嵌入式应用优化
•开源,可以基于GPL协议免费使用
Db4o的使用十分简单,以本地数据库为例子:
(1)打开数据库
IObjectContainer ObjectContainer = Db4oFactory.OpenFile("data.yap");
这句话打开本地数据库data.yap,如果该文件不在,则自动创建数据库文件。
(2)关闭数据库
ObjectContainer.Close();
(3)查询对象
IList<YourClass> rlist = ObjectContainer.Query< YourClass >();
这句话查询数据库中全部的YourClass对象。
Db4o提供了多种对象查询方式,详情可见官方文档。
(4)Activate对象
默认从数据库提取的对象只有一定的深度,更深的被引用的对象为null,为了提取更深的对象,需要Activate已提取的对象:
ObjectContainer.Activate(YourObject, depth)
(4)储存/更新对象
ObjectContainer.Store(YourObject)
如果YourObject不是从数据库中通过查询获得的实例,则将YourObject及它所持有的对象,及持有的持有的……所有可达对象全部储存入数据库。
如果 YourObject是从数据库通过查询获得的实例,则更新YourObject的属性。默认不进行级联更新,你也可以设置级联更新,如:
Db4objects.Db4o.Db4oFactory.Configure().ObjectClass(typeof(YourClass)).CascadeOnUpdate(true);
(5)删除对象
ObjectContainer.Delete(YourObject)
以上是最基本的操作,很快很敏捷。更多的操作可见官方文档。
我现在用最懒惰的方法在用db4o:设置一个Root Object,其它Objects都挂接在Root Object之下,程序启动时就从数据库中把第一个Root实例提取出来,把要用的对象都Activate出来,数据变动时就 Store(ObjectChanged)一下子。
Db4o官方网站:http://www.db4o.com/
JackyXu 的博客有数篇关于db4o的笔记:http://www.cnblogs.com/JackyXu/
db4o 中的数据库重构: http://www.ibm.com/developerworks/cn/java/j-db4o3.html