db4o基础一[通俗易懂]

db4o基础一[通俗易懂]1.打开数据库IObjectContainerdb=Db4oFactory.OpenFile(YapFileName);\\’c:\db4obasic.yap’//IObjectConta

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

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账号...

(0)


相关推荐

  • Python基础教程,Python入门教程(非常详细)[通俗易懂]

    Python基础教程,Python入门教程(非常详细)[通俗易懂]Python英文本意为“蟒蛇”,直到1989年荷兰人GuidovanRossum(简称Guido)发明了一种面向对象的解释型编程语言(后续会介绍),并将其命名为Python,才赋予了

  • vue相比jquery_angular和vue哪个厉害

    vue相比jquery_angular和vue哪个厉害jQuery到Vue的转变是一个思想的转变,将原有的直接操作dom的思想转变到操作数据上前言:很多人说jquey和vue没有什么可比的,应该和Angular,React来比吧,我到觉得他们倒没有多大的可比性,都是基于mvvm思想设计的框架,无非就是实现的方式不一样,在不同场景下性能上会有一些差异。然而从jquery到vue或者说是到mvvm的转变则是一个思想想的转变,是将原有的直接操作dom的思想转变到操作数据上去,难道不是一个根本性的改变吗?jquery介绍:想必大家都用过jquery吧,这个曾经.

    2022年10月15日
  • Linux重启网卡失败_centos7重启后网卡不启动

    Linux重启网卡失败_centos7重启后网卡不启动重启网卡报错:Restartingnetwork(viasystemctl):Jobfornetwork.servicefailedbecausethecontrolprocessexitedwitherrorcode.本人解决办法:去windows里面查找一下关于网卡的服务是否打开如果没有则手动开启这两个服务。有可能是UUID冲突,这里j简单介绍一…

  • idea创建一个javaweb项目

    idea创建一个javaweb项目前提java环境以及tomcat的安装1、IDEA创建Web项目此处以Idea2020.3.4举例1、新建普通Java项目注意:Idea2020无法直接新建JavaWeb项目,只能通过新建普通Java项目的方式间接新建JavaWeb项目。选择项目位置和普通Java项目相同,此处略过。2、修改普通Java项目为JavaWeb项目项目根目录->右键->AddFrameworkSupport选择JavaEE版本勾选左侧的WebApplication

  • 校园小助手–智慧成绩统计服务平台

    校园小助手–智慧成绩统计服务平台

  • 选择排序、插入排序、冒泡排序python实现

    选择排序、插入排序、冒泡排序python实现

    2021年11月24日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号