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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 非空判断方法:IsNotEmpty和isNotBlank的区别。[通俗易懂]

    非空判断方法:IsNotEmpty和isNotBlank的区别。[通俗易懂]在项目中,我们用的最多的是StringUtils中的非空判断方法,相信大部分人都用过IsNotEmpty或者isEmpty方法 publicstaticbooleanisNotEmpty(Stringstr)判断某字符串是否非空,等于!isEmpty(Stringstr),这里不能排除空格字符示例:StringUtils.isNotEmpty(null)=falseStringU…

    2022年8月12日
    7
  • HDU2149-Public Sale

    HDU2149-Public Sale

    2022年1月5日
    44
  • Cubieboard2 debian

    Cubieboard2 debian环境准备本文所使用的主机环境为kubuntu12.10,然而一般情况下,下面涉及到的命令对基于Debian的(X)ubuntu系列都应该适用。为不引起混淆,我们作如下约定:工作目录为$WORK_DIR,目标系统rootfs目录为$WORK_DIR/$ROOTFS_DIR命令均以root用户执行笔者的设定如下:WORK_DIR=/home/itv

    2022年7月22日
    7
  • Environment类,获取程序所在机器信息

    Environment类,获取程序所在机器信息

    2021年9月17日
    202
  • strm().filter().collect()和stream().map().collect()的作用

    strm().filter().collect()和stream().map().collect()的作用在看代码的时候看到了一下

    2025年6月19日
    3
  • 罗技craft键盘使用方法_罗技g105键盘说明书

    罗技craft键盘使用方法_罗技g105键盘说明书引言:本文旨在为大家(程序员)快速入门罗技craft键盘,因为网上关于craft的测评缺乏深度,根本触及不到我的灵魂深处1.开箱咋样,是不是帅的雅痞?2.入门刚回来的几个小时,由满怀喜悦,到笑容逐渐凝固,再到内心毫无波澜,到最后奔溃后狂按键盘想退货。说起来,均是处于自己的无知。【因为此货用了京东白条六期】2.1软件下载记住了,安装完之后打开软件,千万千万别更新,别更新,别更新。——点击跳过就好了。因为有master2S,所以用的之前的安装包。官网下载是很慢的,差不多1个小时?推荐

    2022年10月15日
    2

发表回复

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

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