db4o是一个纯面向对象的数据库系统,DB4O有.NET、MONO和Jave版本,全部用托管代码写成并且开放源代码。如果关注Mono的朋友应该注意到Mono中已经有个可选安装组件DB4O。可以从他们的网站http://www.db4o.com/下载源代码。
下面我简单来说一下DB4O的使用方法:
1. 定义对象 我们定义三个类,为的是测试DB4O处理对象间的关系。 People Car CarCollection
2. 保存对象
private void WriteDate() ![]()
{
//初始化对象数据
People format=new People("format",true,DateTime.Now);
format.Cars.AddCar(new Car("format’s Car",CarColor.Blue));
format.Cars.AddCar(new Car("format’s Car 2",CarColor.Red));
People bill=new People("Bill",true,DateTime.Now);
bill.Cars.AddCar(new Car("bill’s Car",CarColor.Black));
bill.Cars.AddCar(new Car("bill’s Car",CarColor.Red));
ObjectContainer db=Db4o.openFile("formatData.yap");
try ![]()
{
// do something with db4o
//保存format和bill
db.set(format);
db.set(bill);
}
finally ![]()
{
db.close();
}
}
3. 对象的简单查询
![]()
/**//// <summary>
/// 通过简单查询获得数据
/// </summary>
private void ReadDate() ![]()
{
ArrayList data=new ArrayList();
ObjectContainer db=Db4o.openFile("formatData.yap");
//这里查寻Sex为true的对象
People people = new People(null,true);//如果对象中的字段为null,那么就匹配所有数据
ObjectSet result = db.get(people);
int legth=result.size();
try ![]()
{
// do something with db4o
//这里不知道是否是个BUG,我照文档上的用while循环,就outofMemory
for(int i=0;i<legth;i++) ![]()
{
data.Add(result.next());//把查询出的对象添加到ArrayList
}
this.grdPeople.DataSource=data;
}
finally ![]()
{
db.close();
}
4. 对象的高级查询 在db4o中,对象的存储、检索和查询都在对象容器(objectContainer)里完成,它是数据库的一种对象表示。此外,在db4o中,数据的处理是不透明的,因此在处理对象之前,必须明白无误地在数据库中存储和检索对象,这使应用开发过程多了一道步骤。 db4o API提供了一些方法用来控制对象树的读写深度。对于那些对象存放在数据库中的类来说,你不必进行任何特别操作,只要确保类可以串行化即可,不过你必须习惯db4o不同寻常的数据访问方法。
![]()
/**//// <summary>
/// 高级查询获得数据
/// </summary>
private void SearchDate() ![]()
{
ArrayList data=new ArrayList();
ObjectContainer db=Db4o.openFile("formatData.yap");
Query query = db.query();
query.constrain(typeof(People));
//注意这里的name是类中的字段,属性编译后实际上是两个方法
query.descend("name").constrain("format").equal();
ObjectSet result = query.execute();
int legth=result.size();
try ![]()
{
// do something with db4o
//这里不知道是否是个BUG,我照文档上的用while循环,就outofMemory
for(int i=0;i<legth;i++) ![]()
{
data.Add(result.next());//把查询出的对象添加到ArrayList
}
this.grdPeople.DataSource=data;
}
finally ![]()
{
db.close();
}
}
在db4o中,对象的存储、检索和查询都在对象容器(objectContainer)里完成,它是数据库的一种对象表示。此外,在db4o中,数据的处理是不透明的,因此在处理对象之前,必须明白无误地在数据库中存储和检索对象,这使应用开发过程多了一道步骤。
db4o API提供了一些方法用来控制对象树的读写深度。对于那些对象存放在数据库中的类来说,你不必进行任何特别操作,只要确保类可以串行化即可,不过你必须习惯db4o不同寻常的数据访问方法。
http://sourceforge.net/projects/sodaquery/
在db4o中,对象的存储、检索和查询都在对象容器(objectContainer)里完成,它是数据库的一种对象表示。此外,在db4o中,数据的处理是不透明的,因此在处理对象之前,必须明白无误地在数据库中存储和检索对象,这使应用开发过程多了一道步骤。
db4o API提供了一些方法用来控制对象树的读写深度。对于那些对象存放在数据库中的类来说,你不必进行任何特别操作,只要确保类可以串行化即可,不过你必须习惯db4o不同寻常的数据访问方法。
http://sourceforge.net/projects/sodaquery/
在db4o中,对象的存储、检索和查询都在对象容器(objectContainer)里完成,它是数据库的一种对象表示。此外,在db4o中,数据的处理是不透明的,因此在处理对象之前,必须明白无误地在数据库中存储和检索对象,这使应用开发过程多了一道步骤。
db4o API提供了一些方法用来控制对象树的读写深度。对于那些对象存放在数据库中的类来说,你不必进行任何特别操作,只要确保类可以串行化即可,不过你必须习惯db4o不同寻常的数据访问方法。
http://sourceforge.net/projects/sodaquery/
在db4o中,对象的存储、检索和查询都在对象容器(objectContainer)里完成,它是数据库的一种对象表示。此外,在db4o中,数据的处理是不透明的,因此在处理对象之前,必须明白无误地在数据库中存储和检索对象,这使应用开发过程多了一道步骤。
db4o API提供了一些方法用来控制对象树的读写深度。对于那些对象存放在数据库中的惯db4o不同寻常的数据访问方法。
http://sourceforge.net/projects/sodaquery/
类来说,你不必进行任何特别操作,只要确保类可以串行化即可,不过你必须习
copyright @ lizongbo 
