format Blog

给我个权限,我format你的硬盘.

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

DB4O.NETMONOJave版本,全部用托管代码写成并且开放源代码。如果关注Mono朋友应该注意到Mono中已经有个可选安装组件DB4O。可以从他们的网站http://www.db4o.com/下载源代码。

       对于这个对象数据库我只做了初步的研究。感觉操作很像我们怀念的ObjectSet。我个人凭感觉主观认为这个的性能肯定比不上XPO或者Hibernate,毕竟只是一个一个编译出来300kDLL。估计应用价值就是在C/S程序的客户端缓存,操作确实方便。

       下面我简单来说一下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.       对象的高级查询

    /// <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最大的优点在于我们保存的对象没有继承或实现接口,也就是象ObjectSpace那样对对象没有注入东西,而且还不用维护什么映射表,可以说是结合了ObjectSpaceXPO的优点。

我觉得DB4O的查询结果是通过一个接口来实现,我们还要把把对象放到集合中还需要自己处理,这样不象XPO那样很方便,另外真正的对象数据库查询应该不用我们控制查询的层次深度,这个有数据库在我们调用对象的时候自动完成,我们访问数据库就象访问内存集合,同时在大数据量的时候又能有好的表现。估计这一天不会太远了。

其他象对象的更新,删除这些比较简单的操作这里就不例举,请参看DB4O的文档。DB4O的高级查询中还有对象层次查询深度的控制,这里也没有例举。

posted on 2005-03-31 18:36  format  阅读(2257)  评论(5)    收藏  举报