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年7月1日 下午10:36
下一篇 2022年7月1日 下午10:46


相关推荐

  • mysql opkg源_OpenWrt opkg 在线源默认配置

    mysql opkg源_OpenWrt opkg 在线源默认配置destroot/destram/tmplists_dirext/var/opkg-listsoptionoverlay_root/overlaysrc/gzbarrier_breaker_basehttp://downloads.openwrt.org/barrier_breaker/14.07/x86/generic/packages/basesrc/gzbarrier_…

    2022年6月2日
    50
  • springboot springcloud项目实战(阿里云如何搭建服务器)

    https://blog.csdn.net/u010938610/article/details/79282624

    2022年4月15日
    53
  • android 抛出FileNotFoundException异常

    android 抛出FileNotFoundException异常大家都知道,Android6.0中,某些权限属于ProtectedPermission,例如:读写手机存储权限,仅仅在AndroidManifest.xml中申明是无法真正获取到权限的,打开手机的权限管理页面,我们可以看见,读写手机存储权限栏是一个问号,这意味着App并未获取到该权限。这是访问手机存储时,会报出类似下面的错误:java.io.FileNotFoundExcept…

    2025年6月26日
    4
  • 接口与抽象类的区别

    接口和抽象类有什么区别你选择使用接口和抽象类的依据是什么?接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如

    2021年12月24日
    44
  • leetcode 回文数_java 字符串转整数

    leetcode 回文数_java 字符串转整数原题链接请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“1

    2022年8月8日
    7
  • pycharm 使用 anaconda 环境[通俗易懂]

    pycharm 使用 anaconda 环境[通俗易懂]两个方法一:从annaconda内部打开pycharm这里有个下拉框可以选选择你要的anaconda环境再launch你的pycharm但有时候好像不大灵光还是用不上这个环境二:方法二就是万能方法从pycharm内部来配置环境,非常简单。界面最右上角齿轮图标,点击。找到interpreter这里下拉框可以选,发现没有anaconda的环境,你就showall然后点左上角加号选anaconda环境,再去添加你已经存在的anaconda环境。…

    2022年8月28日
    7

发表回复

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

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