Db4o数据库:细说查询

直接保存对象数据库——db4o 在实际开发中,数据的存储是必不可少的,常用的有数据库存储和文件存储。数据库目前有关系型数据库和文档型数据库(No-SQL)。关系型数据库以字段、类型、约束、表关系来存储和管理数据,比较常见的比如Oracle、MySql等都属于RDBMS,文档型数据库是一种可分布式的文档结构数据库,没有关系型数据库中传统意义上的表,比较常见的比如MongoDB、CouchDB等。 今天主要介绍下,在java开发中 阅读详情

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

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

  • Query-By-Example: 简称 QBE ,根据模板类进行匹配查询,这是最简单的一种模式
  • Native Query: 简称 NQ ,Db4o推荐的查询模式
  • The SODA API :这是Db4o底层查询API ,官网文档解释,此API提供向后的兼容性,适用于动态生成的查询
此外,.Net平台还可以通过LINQ进行快速的查询。

准备测试数据


下面给出一个职工类

	/// <summary>
	/// 职工
	/// </summary>
	class Employee
	{
		/// <summary>
		/// 姓名
		/// </summary>
		string _name;
		public string Name
		{
			set { _name = value; }
			get { return _name; }
		}

		/// <summary>
		/// 职位
		/// </summary>
		public Position Position { get; set; }

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

	/// <summary>
	/// 职位
	/// </summary>
	class Position
	{
		/// <summary>
		/// 职称
		/// </summary>
		public string PositionName { get; set; }
	}

填充测试数据

		static List<Employee> GetEmployee()
		{
			List<Employee> _Employees = new List<Employee>();
			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<Employee>
					(
						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原生支持的查询方式,而这些是最基本的,在以后的文章里,我们必定会用到更加繁琐的查询。
刚开始写系列文章,在语言组织方面还是一大缺陷,请大家多多原谅,祝大家生活幸福。

数据库、数据仓库、数据湖有什么不同 数据库适合事务处理和实时交互;数据仓库适合数据分析和决策支持;数据湖适合探索性分析和大规模数据分析。在实际应用中,可以根据具体需求选择合适的技术方案,或者将它们结合使用,以实现最佳的数据管理和分析效果。数据库、数据仓库和数据湖各有其独特的优势和适用场景。在实际应用中,企业可以根据具体需求选择合适的方案,或者将它们结合使用以实现最佳效果。例如,对于需要处理大规模原始数据的场景,可以选择数据湖;对于需要高效分析和决策支持的场景,则可以选择数据仓库;而对于需要事务处理和实时查询的场景,则可以选择数据库 阅读详情

相关推荐

数据库和数据仓库的区别

一、数据仓库的概念数据仓库之父比尔·恩门(Bill Inmon)在1991年出版的“Building the Data Warehouse”(《建立数据仓库》)一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的...

quzihen的博客 8478

db4o:db4o(对象数据库

==== db4o 这是 db4o(对象数据库)的克隆。 来源来自 它由 Versant 开发、商业许可和支持。 db4o 是用 Java 和 .NET 编写的,并提供各自的 API。 db4o 可以在任何支持 Java 或 .NET 的操作系统上运行。 db4o 在多个许可证下提供,包括 GNU 通用公共许可证 (GPL)、db4o 开源兼容性许可证 (dOCL) 和用于专有软件的商业许可证。 Versant 的所有者 Actian 停止了 db4o ( ) 的开发:我们很遗憾地宣布,Actian 决定不积极为新客户寻求和推广商业 db4o 产品不再。 由于 db4o 双许可模式允许将 db4o 的社区版免费用于非商业用途,因此您有机会继续将其用于您的非商业应用程序,甚至可以将其 fork 为社区提供支持。 在有限的时间内,您可以在下找到 subversion 存储库和最新的

DB4O数据库管理与维护工具实用指南

DB4O,即Object Data Management System,是一种开源的嵌入式对象数据库管理系统。它的核心目标是通过对象持久化简化应用程序的开发。与传统的关系型数据库不同,DB4O不需要数据与表结构进行映射,而是直接将对象进行存储和管理。这使得开发者能够以面向对象的方式直接操作数据,无需进行繁琐的SQL查询DB4O提供了几个内置的工具,可以帮助开发者和数据库管理员监控数据库性能:查询性能监控: 可以分析哪些查询消耗的时间最多,并对其优化。对象存储状态分析。

weixin_31459297的博客 525

db4o .net3.5

db4o ,net db4o ,net db4o ,net db4o ,net

Db4o 查询、插入、更新、删除操作

Db4o数据库工具类,懒人式一键调用!!!

今天能喝可乐吗 1097

开源面向对象数据库 db4o 之旅: db4o 查询方式“db4o 之旅(二)”

前言 在 开源面向对象数据库 db4o 之旅 系列文章的第一部分:初识 db4o 中,作者介...

成都心情 447

面向对象数据库db4o

接触到db4o,总结了一下SDK里面的FirstStep,供大家初学的一个参考. 主要内容: 1、什么是db4o 2、db4o的学习资源 3、db4o: the first step -------------------------------------------------------------------------------- 什么是db4o? db4o是一种纯对...

当命运之神把人抛入谷底的时候,也是人生腾飞的最佳时节。这个时候谁能积累能量,谁就能在未来获得丰收的回报;谁若自愿自艾,必定坐失良机,等在前面的将是两手空空和后悔莫及。 423

开源面向对象数据库 db4o 之旅

 第 1 部分: 初识 db4o前言 业界对持久存储领域的追求从未停止过,为了更方便、更容易地用对象表达我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点。最近一年,业界也在反思,到底 ORM 给我们带来的是便利还是麻烦。矛头指向大名鼎鼎的 Hibernate ,纷纷议论其性能问题,大家似乎要达成这样的共识:“在业务逻辑复杂的地方用 SP ,而一般的 CRUD

leagle 2410

db4o学习笔记(三)、db4o查询详解

  摘要:   在本单元中详细介绍了db4o数据库的几种查询方式,对于易于初学者使用的QBE存在的弱点及db4o开发者极力推荐的NQ查询方式在不同开发语言中的实现机制、特点、示例及执行效能作了相应的阐述,同时也对NQ本身的不足进行简要的介绍,本单元中提供了大量的示例在最后给出了所有示例完整的代码。   正文:   db4o数据库系统提供了三种查询接口:(1)、QBE,对于初接触db4o的朋友...

weixin_34151004的博客 259

AI Meets Database: AI4DB and DB4AI

数据库和人工智能可以相互受益。一方面,人工智能可以使数据库更加智能(AI4DB)。例如,传统的经验数据库优化技术(例如,成本估算、连接顺序选择、旋钮调整、索引和视图顾问)无法满足大规模数据库实例、各种应用程序和多样化用户的高性能要求,尤其是在云上。幸运的是,基于学习的技术可以缓解这个问题。另一方面,数据库技术可以优化人工智能模型(DB4AI)。例如,人工智能很难部署,因为它需要开发人员编写复杂的代码和训练复杂的模型。数据库技术可用于降低使用人工智能模型的复杂性,加速人工智能算法,并在数据库内提供人工智能能力

Syntactic Sugar 3517

db4o的使用

from:http://www.ibm.com/developerworks/cn/java/j-lo-db4o2/index.html 前言 在 db4o 之旅 系列文章的第一部分:初识 db4o 中,作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较。在这篇文章中,作者将会介绍 db4o 的安装、启动以及三种不同的查询方式:QBE(Query by Ex

慢慢长大--铭镛 6671

openGauss 智能引擎:AI4DBDB4AI 双向融合的自主数据库实践

AI4DB:利用 AI 技术对数据库进行自我调优、自监控、自修复;DB4AI:将 AI 算法嵌入数据库,支持向量存储、模型训练与推理;融合闭环:通过 DBMind 形成“监控—分析—优化—再监控”的自学习系统。openGauss 不仅是一款数据库,更是一套智能计算基础设施,它标志着数据库已从“被管理对象”迈入“自我演化主体”的新时代。

前端小白在前进的博客 7171

DB4O-8.0-net4全部资源

db4o的最后发布的资料,包括全部源码、dll和ObjectManage查看插件。

DB4O_.net

.net 版的db4o桌面数据引擎,适用于快速开发小型桌面应用程序。

Db4o数据库:快速入门

偶遇Db4o,非常有感觉,就推荐给大家吧。它是一种开源对象数据库。百分之百的面对对象,操作数据库就像操作对象一样简单快速。它有Java和.Net两个版本,在其官网可下载安装包及源代码。以.Net版本为例,给大家介绍Db4o的使用。 安装完成后,在omn文件夹下,有一个Visual Studio的插件(ObjectManagerEnterprise),利用它可以像其他数据库工具一样,可以快速访问对

孙飞的博客 4867

3万字细说数据仓库体系(建议收藏)

一 什么是数据仓库1.1数据仓库概念数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它...

a934079371的博客 7016

关系型数据库

<br />ZoundryDocument <br />随着面向对象概念的深入人心,也逐渐发展到了数据库领域。由于现在的软件大都是面向对象设计的,而是用关系型数据库的话,与软件需要有一个转换,这中间会比较繁琐。<br />今天找了一个开源的面向对象数据库来体验一下。下面开始介绍Db4o:面向对象数据库 提供向关系型数据库的兼容 嵌入式数据库,以一个库的形式提供(dll/jar) 支持客户端-服务器模式 可以动态定义数据结构 Native Queries基于语言来访问数据库,而不像sql

黄一舟的专栏 396

面向 Java 开发人员的 db4o 指南: 简介和概览

早就听说数据库间的大战以关系型数据库的胜利告终。然而,这之后,编程界真的就风平浪静、一片繁荣了吗?持肯定观点的人恐怕最近都没有试过使用关系数据库来支持 Java™ 对象吧。著名作家和讲师 Ted Neward 为我们带来了这个由多个部分组成的 系列 ,深入介绍了 db4o,它是当前关系型数据库的一种面向对象的可选方案。在我出道成为程序员的时候,数据库之战似乎已完全平息。Oracle 和其他几个

|▓ Ray 1061
上一篇: Db4o数据库:快速入门
下一篇: [Prism]如何在主程序中合理的弹出子窗体
Rommend
博客等级 码龄15年 21粉丝 20原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值