大家好,又见面了,我是你们的朋友全栈君。
1. 打开数据库
IObjectContainer db = Db4oFactory.OpenFile(YapFileName);\\”c:\db4obasic.yap”
//IObjectContainer对外就是一个数据库,也是我们操作db4o的主要接口。
//关闭IObjectContainer使用#.Close()函数,
//它将会关闭数据库文件并释放其占用的系统资源。
try
{
执行数据库操作
}
finally
{
db.Close();
}
2.保存对象到数据库
Pilot pilot1 = new Pilot(“罗纳尔多”, 100);
db.Set(pilot1);
3. 更新
IObjectSet result = db.Get(new Pilot(“罗纳尔多”, 0));
Pilot found = (Pilot)result.Next();
found.AddPoints(11);
db.Set(found);//Set()方法更新对象之前我们必须先进行了查询
4.删除
IObjectSet result = db.Get(new Pilot(“罗纳尔多”, 0));
Pilot found = (Pilot)result.Next();
db.Delete(found);
5.遍历查询结果集IObjectSet
public static void ListResult(IObjectSet result)
{
Console.WriteLine(result.Count);//结果总数
foreach (object item in result)
{
Console.WriteLine(item);
}
}
6.QBE查询方法(通过实例查询)
a.查询所有的
Pilot proto = new Pilot(null, 0);
//提供的原型对象中车手的积分为0,而实际返回的车手对象中则没有包含积分为0的对象,
//这是因为对于int型字段的默认值为0。
//
IObjectSet result = db.Get(proto);
b.查询名字为罗纳尔多
Pilot proto = new Pilot(“罗纳尔多”, 0);
IObjectSet result = db.Get(proto);
7. db4o原生/本地化查询(NQ)
IObjectSet result = db.Get(typeof(Pilot))
Net2.0:
IList <Pilot> pilots = db.query<Pilot>(typeof(Pilot));
8. NQ查询条件
Net1.1:
//Net 1.1 增加条件后的查询
IList pilots = db.Query(new PilotHundredPoints());
//不支持泛型的语言来说,都需要提供一个扩展Db4objects.Db4o.Query.Predicate的类,
//并提供一个参数为待查询的类并返回布尔值的函数#.Match()或#.match(),
//其函数签名为:bool Match(Pilot candidate);
foreach (object o in pilots)
{
Console.WriteLine(o.ToString());
}
public class PilotHundredPoints : Db4objects.Db4o.Query.Predicate
{
public bool Match(Pilot pilot)
{
return pilot.Points == 100;
}
}
Net 2.0:
//Net 2.0 增加条件后的查询
IList <Pilot> pilots = db.Query <Pilot> (delegate(Pilot pilot) {
return pilot.Points == 100;
});
foreach (object o in pilots)
{
Console.WriteLine(o.ToString());
}
8. SODA查询接口(SODA是一种通过数据库持久层进行的查询,查询语句被定义在字符串中,并通过持久
引擎进行解释执行)
Db4objects.Db4o.Query.IQuery query=db.Query();
query.Constrain(typeof(Pilot));
Db4objects.Db4o.Query.IQuery pointQuery = query.Descend(“_points”);
query.Descend(“_name”).Constrain(“姚明”)
.Or(pointQuery.Constrain(99).Greater()
.And(pointQuery.Constrain(199).Smaller()));
IObjectSet result=query.Execute();
跟NQ查询的对比:
IList<Pilot> pilots = db.Query<Pilot>(delegate(Pilot pilot)
{
return pilot.Points > 99
&& pilot.Points < 199
|| pilot.Name == “姚明”;
});
9. 扩展比较类来实现查询 查询点数集合
IObjectSet result = db.Query(new ArbitraryQuery(new int[]{1,100}));
public class ArbitraryQuery : Predicate
{
private int[] _points;
public ArbitraryQuery(int[] points)
{
_points = points;
}
public bool Match(Pilot pilot)
{
foreach (int points in _points)
{
if (pilot.Points == points)
{
return true;
}
}
return pilot.Name.StartsWith(“姚”);
}
}
10 SODA进阶1
IQuery query = db.Query();
query.Constrain(typeof(Pilot));
IObjectSet result = query.Execute();
11. SODA进阶2
IQuery query = db.Query();
query.Constrain(typeof(Pilot));
//使用”descend”的目的是将附加的约束条件增加到表达式树
query.Descend(“_name”).Constrain(“姚明”);//string _name; 这里的名称是字段的名称
// query.Descend(“_points”).Constrain(100);
//query.Descend(“_name”).Constrain(“罗纳尔多”).Not(); //不是“罗纳尔多”的
IObjectSet result = query.Execute();
12. 增加条件 And
IQuery query = db.Query();
query.Constrain(typeof(Pilot));
IConstraint constr = query.Descend(“_name”).Constrain(“罗纳尔多”);
query.Descend(“_points”).Constrain(99).And(constr);
IObjectSet result = query.Execute();
13. 增加条件 Or
IQuery query = db.Query();
query.Constrain(typeof(Pilot));
IConstraint constr = query.Descend(“_name”).Constrain(“罗纳尔多”);
query.Descend(“_points”).Constrain(99).Or(constr);
IObjectSet result = query.Execute();
14.对给定值作比较运算
query.Descend(“_points”).Constrain(99).Greater();
15. 对数据成员的默认进行查询
query.Descend(“_points”).Constrain(0);
16. 对查询结果进行排序
IQuery query = db.Query();
query.Constrain(typeof(Pilot));
query.Descend(“_name”).OrderAscending(); //升序
query.Descend(“_name”).OrderDescending(); //降序
IObjectSet result = query.Execute();
db4o有种模式可以将数据保存在内容中,方法是db=ExtDb4o.openMemoryFile(new MemoryFile()); 读取文件和读取内存本来就不是一个数量级
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154940.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...