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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机:指纹识别基本原理图_手机指纹识别的工作原理

    手机:指纹识别基本原理图_手机指纹识别的工作原理指纹识别技术作为生物识别技术之一,指纹识别技术是通过取像设备读取指纹图像,然后在用识别软件提取指纹特征数据,最后在进行匹配识别算法得到结果,以确认指纹所有人身份的生物特征识别技术。指纹识别功能具体工

    2022年8月5日
    4
  • pycharm打包python项目_pycharm 打包与在线上传文件「建议收藏」

    pycharm打包python项目_pycharm 打包与在线上传文件「建议收藏」大致分为以下两部分1.本地操作将包文件按照标准格式进行规范处理、打包备份项目开发过程中:经常会涉及到备份操作常规:通过tar命令,将程序文件压缩备份较常见:可以通过系统提供的打包操作,将文件自动按照标准化格式存储2.远程操作[专门用于协同]将包文件进行标准化构建将包文件进行打包处理上传发布到网络上具体操作以下以一个例子作为说明image.png1。在包文件中,添加一个构建模块setup.pyim…

    2025年6月9日
    0
  • 一些常用的yum安装卸载的命令

    一些常用的yum安装卸载的命令

    2021年5月31日
    134
  • 本地数据库同步到云主机上

    本地数据库同步到云主机上同步前的准备:首先你本地跟云主机上都要有数据库、可视化的辅助工具(我用的NavicatPremium,其他的也都一个道理),这里靠的就是这个NavicatPremium工具1.首先在云主机上创建一个链接,建一个数据库,最好是与本地数据库同名2.在本地新建一个连接,可以点击下边的链接测试,测试一下看看是否能连接成功3.找到工具栏里的:工具->数据传输4.经过上述三步你最起码有了两个连接

    2022年5月25日
    35
  • 【linux】awk相关

    【linux】awk相关

    2022年4月3日
    34
  • 测试这个东西好不啦

    测试这个东西好不啦欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗Ctrl+B斜体Ctrl+I引用Ctrl

    2022年10月31日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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