db4o学习笔记(一)

db4o是一个开源的面向对象数据库,他实现了把对象持久化到数据库。db4o支持Java和.Net,这里介绍的是db4o for net。
和关系数据库一样,db4o也有数据文件,db4o数据文件扩展名为'yap'。db4o数据引擎由Db4objects.Db4o.dll组成.
db4o是怎么把对象保存到数据库的,举个简单的例子:
首先在项目里引用Db4objects.Db4o.dll
None.gif      // 定义一个学生类
None.gif
     public   class  Student
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
private string name;
InBlock.gif        
private int age;
InBlock.gif        
private School myschool;
InBlock.gif
InBlock.gif        
public Student()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
//
InBlock.gif            
// TODO: 在此处添加构造函数逻辑
InBlock.gif            
//
ExpandedSubBlockEnd.gif
        }

InBlock.gif
InBlock.gif        
public Student(string name,int age,School school)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.name=name;
InBlock.gif            
this.age=age;
InBlock.gif            
this.myschool=school;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public string Name
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return name;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                name
=value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public int Age
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return age;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                age
=value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public School MySchool
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return myschool;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public override string ToString()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return string.Format("name:{0};age:{1};school:({2})",name,age,myschool);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedBlockEnd.gif    }

None.gif

 保存学生对象到数据库

None.gif              // 打开数据库文件Student.yap,如果不存在,会自动创建一个Student.yap文件
None.gif
            IObjectContainer db = Db4oFactory.OpenFile( " Student.yap " );
None.gif            School school
= new  School( " ustc " , " china " );
None.gif            Student student1
= new  Student( " Tom " , 20 ,school);
None.gif            
try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                db.Set(student1);
ExpandedBlockEnd.gif            }

None.gif            
finally
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                db.Close();
ExpandedBlockEnd.gif            }

None.gif

db4o有一个管理工具叫Object Manager,是用Java写的,你可以通过Object Manager查看Student对象是否保存到数据库里。
和关系数据库一样,db4o也有自己的查询语言。分别是QBE(Query By Example),NQ(Native Query)和SODA(Simple Object Database Access).

QBE(Query By Example)
QBE查询方式先创建一个Template对象,通过和Template比较返回匹配的全部对象,例如:

None.gif              // 创建Template对象
None.gif
            Student template = new  Student( " Tom " , 0 , null );
None.gif            
// 查询和Template匹配的全部对象
None.gif
            IObjectSet result = db.Get(template);
None.gif            ListResult(result);
None.gif

NQ(Native Query)
NQ查询方式可以用你熟悉的编程语言进行数据库查询,例如:
None.gif      // 定义一个继承自Predicate的类,Predicate是Native Query的基类
None.gif
     public   class  ComplexQuery:Predicate
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
//定义一个Math方法,里面是返回bool值的查询表达式
InBlock.gif
        public bool Match(Student student)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return student.Age>26;
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif
None.gif            
// 查询对象
None.gif
            IObjectSet result = db.Query( new  ComplexQuery());
None.gif            ListResult(result);
None.gif

SODA(Simple Object Database Access)
SODA ,简单对象数据库访问。SODA 是 db4o 最底层的查询 API

None.gif      // 构造查询对象
None.gif
    IQuery query = db.Query();
None.gif    
// 设置约束实例
None.gif
    query.Constrain( typeof (Student));
None.gif    
// 设置约束实例的字段和约束条件
None.gif
    query.Descend( " name " ).Constrain( " Tom " );
None.gif    
// 查询对象
None.gif
    IObjectSet result = query.Execute();
None.gif    ListResult(result);
None.gif

转载于:https://www.cnblogs.com/ustc9702/archive/2007/06/26/796488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值