前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >db4o基础一[通俗易懂]

db4o基础一[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-06 11:45:39
发布2022-09-06 11:45:39
3880
举报

大家好,又见面了,我是你们的朋友全栈君。

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()); 读取文件和读取内存本来就不是一个数量级

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154940.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档