2025年Db4o数据库:细说查询[通俗易懂]

Db4o数据库:细说查询[通俗易懂]通过第一篇的介绍 相信大家也对 Db4o 有一定的了解 接下来就详细说一下有关查询的话题 Db4o 原生支持 3 中查询模式 Query By Example 简称 QBE 根据模板类进行匹配查询 这是最简单的一种模式 Native Query 简称 NQ Db4o 推荐的查询模式 The SODA API 这是 Db4o 底层查询 API 官网文档解释 此 API 提供向后的兼容性

通过第一篇的介绍,相信大家也对Db4o有一定的了解,接下来就详细说一下有关查询的话题。

Db4o原生支持3中查询模式:

Query-By-Example: 简称 QBE ,根据模板类进行匹配查询,这是最简单的一种模式

Native Query: 简称 NQ ,Db4o推荐的查询模式

The SODA API :这是Db4o底层查询API ,官网文档解释,此API提供向后的兼容性,适用于动态生成的查询

此外,.Net平台还可以通过LINQ进行快速的查询。

准备测试数据

下面给出一个职工类

 /// 
/// 职工
///


class Employee
{
///
/// 姓名
///


string _name;
public string Name
{
set { _name = value; }
get { return _name; }
}

///
/// 职位
///


public Position Position { get; set; }

public override string ToString()
{
return string.Format("姓名:{0},职位:{1}",this.Name,this.Position.PositionName);
}
}

///
/// 职位
///


class Position
{
///
/// 职称
///


public string PositionName { get; set; }
}
























填充测试数据

 static List 
  
    
    
      GetEmployee() 
     
{
List _Employees = new List ();
Employee _Employee = new Employee { Name = "Sunth", Position = new Position { PositionName = "CEO" } };
_Employees.Add(_Employee);
_Employee = new Employee { Name = "Jerry", Position = new Position { PositionName = "CTO" } };
_Employees.Add(_Employee);
_Employee = new Employee { Name = "Tom", Position = new Position { PositionName = "COO" } };
_Employees.Add(_Employee);
return _Employees;
}









Query-By-Example

一种非常简单直观的查询方式,通过模板进行对比查询,比如说查一个名为Sunth的职工信息

 static void Main(string[] args)
{
string DbPath = "Pilot.yap";
if (File.Exists(DbPath))
File.Delete(DbPath);
using (IObjectContainer Container = Db4oEmbedded.OpenFile(DbPath))
{
//对数据库进行初始化,并存入测试数据
var Query = GetEmployee();
Query.ForEach
(
(a) => { Container.Store(a); }
);

//查询一个叫做Sunth的职工
Employee _Employee = new Employee();
_Employee.Name = "Sunth";
IObjectSet Result = Container.QueryByExample(_Employee);
//打印结果
PrintResult(Result);
}
Console.ReadKey();
}





















大家是否明白了QueryByExample()这个方法名的含义,根据你所给出指定类型的模板,Db4o进行属性值匹配查询。如果模板中属性被没有赋值,Db4o自动取默认值当做条件。如果想查询所有匹配此类型的数据,只需要实例化一个Employee对象,当做参数,传入就OK。

这种方法虽然很简单,但是它有很大的局限性,比如你不能直接使用 and , or ,like 等操作

NativeQuery

这是Db4o推荐的查询方式,但在.Net平台还是比较推荐使用LINQ的。还是那个例子,查询一个名为Sunth的职工信息

 static void Main(string[] args)
{
string DbPath = "Pilot.yap";
if (File.Exists(DbPath))
File.Delete(DbPath);
using (IObjectContainer Container = Db4oEmbedded.OpenFile(DbPath))
{
//对数据库进行初始化,并存入测试数据
var Query = GetEmployee();
Query.ForEach
(
(a) => { Container.Store(a); }
);

//查询一个叫做Sunth的职工
Employee _Employee = new Employee();
var Result = Container.Query
(
delegate(Employee employee)
{
return employee.Name == "Sunth";
}
);
//打印结果
PrintResult(Result);
}
Console.ReadKey();
}


























这样是不是灵活性更高点了呢。

The SODA API

Db4o底层的查询方式,使用便捷度肯定不如前两种,但是了解是必须的,当遇到不可解决的问题时,这可能就是一思路。

查询一个名为Sunth的职工信息,具体的注释请看代码

 static void Main(string[] args)
{
string DbPath = "Pilot.yap";
if (File.Exists(DbPath))
File.Delete(DbPath);
using (IObjectContainer Container = Db4oEmbedded.OpenFile(DbPath))
{
//对数据库进行初始化,并存入测试数据
var Query = GetEmployee();
Query.ForEach
(
(a) => { Container.Store(a); }
);

//查询一个叫做Sunth的职工
IQuery _IQuery = Container.Query();
//强制约束Employee类型
_IQuery.Constrain(typeof(Employee));
//注意此“_name”为字段名称,非属性名称
_IQuery.Descend("_name").Constrain("Sunth");
//执行查询
IObjectSet Result = _IQuery.Execute();
//打印结果
PrintResult(Result);
}
Console.ReadKey();
}

























结束语

说了Db4o原生支持的查询方式,而这些是最基本的,在以后的文章里,我们必定会用到更加繁琐的查询。

刚开始写系列文章,在语言组织方面还是一大缺陷,请大家多多原谅,祝大家生活幸福。

今天的文章 2025年Db4o数据库:细说查询[通俗易懂]分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-02-17 22:01
下一篇 2025-08-10 19:17

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/137229.html