DB4O学习笔记

DB4O学习笔记什么是DB4O“利用表格存储对象,就像是将汽车开回家,然后拆成零件放进车库里,早晨可以再把汽车装配起来。但是人们不禁要问,这是不是泊车的最有效的方法呢。”–EstherDysondb4o是一个开源的纯面向对象数据库引擎,对于Java与.NET开发者来说都是一个简单易用的对象持久化工具,使用简单。同时,db4o已经被第三方验证为具有优秀性能的面向对象数据库,下面的基准测…

大家好,又见面了,我是你们的朋友全栈君。

什么是DB4O

利用表格存储对象,就像是将汽车开回家,然后拆成零件放进车库里,早晨可以再把汽车装配起来。但是人们不禁要问,这是不是泊车的最有效的方法呢。” – Esther Dyson

db4o 是一个开源的纯面向对象数据库引擎,对于 Java .NET 开发者来说都是一个简单易用的对象持久化工具,使用简单。同时,db4o 已经被第三方验证为具有优秀性能的面向对象数据库, 下面的基准测试图对 db4o 和一些传统的持久方案进行了比较。db4o 在这次比较中排名第二,仅仅落后于JDBC。通过图 1 的基准测试结果,值得我们细细品味的是采用 Hibernate/HSQLDB 的方案和 JDBC/HSQLDB 的方案在性能方面有着显著差距,这也证实了业界对 Hibernate 的担忧。而 db4o 的优异性能,让我们相信: 更 OO 并不一定会牺牲性能。


1. HSQLDB
基准测试

DB4O学习笔记

同时,db4o 的一个特点就是无需 DBA 的管理,占用资源很小,这很适合嵌入式应用以及 Cache 应用, 所以自从 db4o 发布以来,迅速吸引了大批用户将 db4o 用于各种各样的嵌入式系统,包括流动软件、医疗设备和实时控制系统。

db4o 由来自加州硅谷的开源数据库公司 db4objects 开发并负责商业运营和支持。db4o 是基于 GPL 协议。db4objects 2004 年在 CEO Christof Wittig 的领导下组成,资金背景包括 Mark Leslie Veritas 软件公司 CEO Vinod Khosla Sun 公司创始人之一)、 Sun 公司 CEO 在内的硅谷高层投资人组成。毫无疑问,今天 db4objects 公司是硅谷炙手可热的技术创新者之一。

db4o 的目标是提供一个功能强大的,适合嵌入的数据库引擎,可以工作在设备,移动产品,桌面以及服务器等各种平台。

 

DB4O的特性

  • 开源模式。与其他 ODBMS 不同,db4o 为开源软件,通过开源社区的力量驱动开发 db4o 产品。

  • 原生数据库。db4o 100% 原生的面向对象数据库,直接使用编程语言 Java C# 来操作数据库。程序员无需进行 OR 映射来存储对象,大大节省了程序员在存储数据的开发时间。

  • 高性能。2 db4o 官方公布的基准测试数据,db4o 比采用 Hibernate/MySQL 方案在某些测试线路上速度高出 44 倍之多!并且安装简单,仅仅需要 400Kb 左右的 .jar .dll 库文件。在接下来的系列文章中,我们将只关注在 Java 平台的应用,但是实际上 db4o 毫无疑问会很好地在 .NET 平台工作。 

              2. db4o 官方基准测试数据        

  • DB4O学习笔记易嵌入。使用 db4o 仅需引入 400 k jar 文件或是 dll 文件,内存消耗极小。

  • 零管理。使用 db4o 无需 DBA,实现零管理。

  • 支持多种平台。db4o 支持从 Java 1.1 Java 5.0,此外还支持 .NET CompactFramework Mono .NET 平台,也可以运行在 CDC PersonalProfile Symbian Savaje 以及 Zaurus 这种支持反射的 J2ME 方言环境中,还可以运行在 CLDC MIDP RIM/Blackberry Palm OS 这种不支持反射的 J2ME 环境中。

 

下载和安装

请到 www.db4o.com 下载,建议下载db4o for .NET 3.5, version 7.12+。安装完后在开始菜单db4o选项卡中会看到帮助文档和两个插件(for VS2005VS2008),根据本机IDE选择安装插件,安装完后会自动集成到IDE(3)

3. db4o for VS插件

 

DB4O学习笔记Demo编写

 

创建一个数据库

(1)、用VS创建一个控制台项目,引用db4o客户端DLL–Db4objects.Db4o.dll(在db4o安装目录bin下可以找到),在Main函数编写如下代码;

1.  static void Main(string[] args)   

2.   {   

3.    

4.       string _DBPath = “D:\\TestDB.yap”;   

5.       IObjectContainer db = Db4objects.Db4o.Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), _DBPath);      

6.  //D盘根目录下创建了一个空的数据库(TestDB.yap),很像文件操作吧,有则打开,没有则建新;        

7.       db.Close();   

8.  }

9.    

(2)、编写两个待存储用的类(CarPilot

1.  public class Pilot   

2.  {   

3.      public Pilot(string name, int points){Name = name; Points = points;}   

4.      public string Name { getset; }   

5.      public int Points { getset; }   

6.  }   

7.    

8.  public class Car   

9.  {   

10.     public Car(string model){ Model = model;}   

11.     public Pilot Pilot { getset; }   

12.     public string Model{
get;set; }   

13. }  

3)、开始存储、查询、修改、删除对象

1.  string _DBPath = “D:\\TestDB.yap”;   

2.  IObjectContainer db = Db4oEmbedded.OpenFile(Db4oEmbedded.NewConfiguration(), _DBPath);//创建或连接数据库                

3.  try  

4.  {   

5.      //1、新增对象   

6.      Car car1 = new Car(“Ferrari”);   

7.      Pilot pilot1 = new Pilot(“Michael Schumacher”, 100);   

8.      car1.Pilot = pilot1;   

9.      db.Store(car1);//保存对象到数据库   

10.     Car car2 = new Car(“BMW”);   

11.     Pilot pilot2 = new Pilot(“Rubens Barrichello”, 99);   

12.     car2.Pilot = pilot2;   

13.     db.Store(car2);//保存对象到数据库                  

14.     //查询   

15.     IList<Pilot> pilots = db.Query<Pilot>(typeof(Pilot));   

16.     // queryByName

17.     IList<Pilot> pilots1 = db.Query<Pilot>(delegate(Pilot pilot)     

18.     {   

19.         return pilot.Name == “Michael Schumacher”;   

20.     });

21.     //Linq 查询  

22.     IList<Pilot> pilots2 = (from Pilot p in db where p.Name.StartsWith(“Micha       el”) select p).ToList();  

23.   

24.     db.Store(pilot1);  //更新   

25.   

26.     db.Delete(pilot1);//删除   

27.   

28.     db.Commit();//提交事务   

29. }   

30. catch (Exception ex)   

31. {   

32.     db.Rollback();//事务回滚   

33.     throw ex;   

34. }   

35. finally  

36. {   

37.     db.Close();//关闭连接   

38. }  

(4)、利用安装的VS插件查看数据库(工具—>ObjectManage

Enterprise–>Connect,选择数据库路径(D:\TestDB.yap),如下图:

4. db4o TestDB.yap数据库查看

 

DB4O学习笔记 

总结

 

db4o 因为其开源的理念,以及创新的实现,获得了 Java Pro 2006 读者选择奖。无论从成功案例还是 db4o 本身来看,这款纯面向对象数据库都值得我们关注,从官方论坛反馈情况看,有相当的用户准备把关系型数据库迁移到 db4o 。而最新发布的 7.3 版本,更是把性能再次提升很多,让我们一起分享 db4o 带来的这场面向对象数据库风暴吧。

转载于:https://www.cnblogs.com/seven_cheng/archive/2010/03/28/1698959.html

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

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

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


相关推荐

  • [leetcode]Search for a Range

    [leetcode]Search for a Range

    2022年1月14日
    45
  • mysql — 清空表中数据

    mysql — 清空表中数据

    2021年6月2日
    87
  • win32 api函数_c调用webapi接口

    win32 api函数_c调用webapi接口前言如果要在Windows上面写程序,就不得不了解一些Win32Api的使用,Win32Api在C/C++的环境中使用非常的方便,直接调用头文件<Windows.h>使用就行了,但在C#中不会这么简单,需要在指定的模块之中导入想要的Win32,下面我们来学习一下如何在C#之中使用Win32Api…在测试Win32Api之前,我先教大家如何获取有窗口的进程信息,代码如下:有窗口的进程,它的窗口句柄不会为0,所以我们只需在所有运行的程序之中判断一.

    2022年10月11日
    4
  • 【转】Matlab axis用法

    【转】Matlab axis用法Matlabaxis用法转自:http://blog.sina.com.cn/s/blog_b26a90750101kxdx.htmlaxisoff;%去掉坐标轴axistight;%紧坐标轴axisequal;%等比坐标轴axis([-0.1,8.1,-1.1,1.1]);%坐标轴的显示范围%gca:gca,h=figur…

    2022年5月29日
    37
  • windows环境下用c++实现socket编程

    windows环境下用c++实现socket编程一、什么是Socketsocket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);前两种较常用。基于TCP的socket编程是采用的流式套接字。(1)SOCK_STREAM表示面向连接的

    2022年7月13日
    30
  • SPI与IIC通信协议比对篇

    SPI与IIC通信协议比对篇目录一、SPI与IIC通信协议比对:二、SPI通信协议:(1)引脚简介(2)起始信号:标号①;停止信号:标号⑥(3)数据的有效性:②③④⑤(4)CPOL/CPHA及通讯模式三、IIC通信协议:(1)起始条件、停止条件(2)数据的有效性(3)主机写数据到从机(4)应答信号(ACK)与非应答信号(NACK)(5)字节格式(6)…

    2022年6月7日
    48

发表回复

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

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