为什么80%的码农都做不了架构师?>>>   hot3.png

下载和安装db4o

db4o 所有最新的版本都可以直接在官方网站上下载,进入 db4o 的下载页面,我们可以看到最新的 for Java 稳定版本,包括 JAR、源代码、入门文档、API 等内容的完整的打包文件只有 6 MB,db4o 还有一个对象数据库管理工具 ObjectManager,目前版本是 1.8。

接着在 Eclipse 中新建 Java 项目,把 db4o 对象数据库引擎包 db4o-8.0.249.16098-all-java5.jar 导入进项目。由于 db4o 支持多种版本的 JDK,除了 for JDK 5.0 的 db4o-8.0.249.16098-all-java5.jar 外,还有 for JDK 1.1、1.2-1.4 的 JAR 包,以适应多种环境。与 Hibernate、iBATIS SQL Maps 相比,db4o 更加自然,无需过多地引用第三方支持库。

db4o的包结构

db4o 怎样进行对象持久化呢?通过浏览目录可以发现,与传统的 RDBMS 一样,db4o 也有自己的数据库文件, 在 db4o 中数据库文件的后缀名是“*.yap”。让我们先来了解一下 db4o 对象数据库引擎的主要包结构:

  • com.db4o
    com.db4o 包含了使用 db4o 时最经常用到的功能。两个最重要的接口是 com.db4o.Db4o 和 com.db4o.ObjectContainer。com.db4o.Db4o 工厂是运行 db4o 的起点,这个类中的静态方法可以开启数据库文件、启动服务器或连接一个已经存在的服务器,还可以在开启数据库之前进行 db4o 环境配置。com.db4o.ObjectContainer 接口很重要,开发过程中 99% 的时间都会用到它,ObjectContainer 可在单用户模式下作为数据库实例,也可作为 db4o 服务器的客户端。每个 ObjectContainer 实例都有自己的事务。所有的操作都有事务保证。当打开 ObjectContainer,就已经进入事务了,commit() 或 rollback() 时,下一个事务立即启动。每个 ObjectContainer 实例维护它自己所管理的已存储和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃。

  • com.db4o.ext
    你也许想知道为什么在 ObjectContainer 中只能看见很少的方法,原因如下:db4o 接口提供了两个途径,分别在 com.db4o 和 com.db4o.ext 包中。这样做首先是为了让开发者能快速上手;其次为了让其他产品能更容易的复制基本的 db4o 接口;开发者从这一点上也能看出 db4o 是相当轻量级的。每个 com.db4o.ObjectContainer 对象也是 com.db4o.ext.ExtObjectContainer 对象。可以转换成 ExtObjectContainer 获得更多高级特性。

  • com.db4o.config
    com.db4o.config 包含了所有配置 db4o 所需的类。

  • com.db4o.query
    com.db4o.query 包包含了构造“原生查询, NQ(Native Queries)”所需的 Predicate 类。NQ 是 db4o 最主要的查询接口。

初始化数据库

db4o 提供两种运行模式,分别是本地模式和服务器模式。本地模式是指直接在程序里打开 db4o 数据库文件进行操作:

Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), "auto.yap");

而服务器模式则是客户端通过 IP 地址、端口以及授权口令来访问服务器:

服务器端:

ObjectServer server = Db4oClientServer.openServer("auto.yap", 1212);
server.grantAccess("admin", "1");

客户端:

// ip为服务器的ip地址
Db4oClientServer.openClient(ip, 1212, "admin", "1");

需要注意的是db4o会自动创建数据库文件,但是并不会创建数据库文件目录,比如我想创建数据库文件"/export/db4o/auto.yap",db4o并不会自动创建"/export/db4o"目录 ,所以创建数据库文件时最好初始化下数据库目录:

private void initDBFile(String dbName) {File file = new File(dbName);if (file.exists()) {return;}List<File> fList = new ArrayList<File>();File pFile = file.getParentFile();while (!pFile.exists()) {fList.add(pFile);pFile = pFile.getParentFile();}for (int i = fList.size() - 1; i >= 0; i--) {File f = fList.get(i);f.mkdir();}
}

使用数据库

上面介绍的两种方式都可以得到 ObjectContainer 实例,就目前Java EE的分布式的应用环境来看,服务器模式更有现实意义;而本地模式更适合于单服务器应用。因为分布式模式比较常用,本文在下面的例子都将采用分布式模式。

在下面的例子中,会使用一个UserVO对象,然后介绍db4o对该对象的CRUD。

UserVO对象

public class UserVO implements Serializable {private static final long serialVersionUID = -9129148024922569814L;private String userName;private String password;public UserVO() {}public UserVO(String userName, String password) {this.userName = userName;this.password = password;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (!(obj instanceof UserVO)) {return false;}UserVO other = (UserVO) obj;if (!(userName == null ? other.userName == null : userName.equals(other.userName))){return false;}if (!(password == null ? other.password == null : password.equals(other.password))){return false;}return true;}@Overridepublic int hashCode() {final int prime = 31;int result = 17;result = prime * result + ((userName == null) ? 0 : userName.hashCode());result = prime * result + ((password == null) ? 0 : password.hashCode());return result;}@Overridepublic String toString() {return "UserVO [userName=" + userName + ", password=" + password + "]";}
}

增加(Create)

public static void main(String[] args) {UserVO vo = new UserVO("admin", "1");// 打开数据库,ip为服务器ipObjectContainer db = Db4oClientServer.openClient(ip, 1212, "admin", "1");try {// 存储数据db.store(vo);// 提交事务db.commit();} catch (Exception e) {// 出现异常则回滚db.rollback();} finally {// 关闭连接db.close();}
}

读取(Retrieve)

public static void main(String[] args) {// 打开数据库ObjectContainer db = Db4oClientServer.openClient(ip, 1212, "admin", "1");try {// 构造查询对象Query query = db.query();// 设置被约束实例query.constrain(UserVO.class);// 设置被约束实例的字段和约束条件query.descend("userName").constrain("admin");// 查询对象ObjectSet<UserVO> list = query.execute();// do something with list} finally {// 关闭连接db.close();}
}

更新(Update)

public static void main(String[] args) {// 打开数据库ObjectContainer db = Db4oClientServer.openClient(ip, 1212, "admin", "1");try {ObjectSet<UserVO> result = db.query(new Predicate<UserVO>() {private static final long serialVersionUID = 1554763863522546547L;public boolean match(UserVO vo) {// 匹配userName为admin的UserVOreturn vo.getUserName().equals("admin");}});if (result.size() != 1) {throw new RuntimeException("size does not matched.");}UserVO vo = result.next();// 修改passportvo.setPassword("0");db.store(vo);db.commit();} catch (Exception e) {db.rollback();} finally {// 关闭连接db.close();}
}

删除(Delete)

public static void main(String[] args) {UserVO vo = new UserVO("admin", "1");// 打开数据库ObjectContainer db = Db4oClientServer.openClient(ip, 1212, "admin", "1");try {ObjectSet<UserVO> result = db.query(new Predicate<UserVO>() {private static final long serialVersionUID = -4397123083792023957L;public boolean match(UserVO vo) {// 匹配userName为admin的UserVOreturn vo.getUserName().equals("admin");}});if (result.size() != 1) {throw new RuntimeException("size does not matched.");}UserVO vo = result.next();db.delete(vo);db.commit();} catch (Exception e) {db.rollback();} finally {// 关闭连接db.close();}
}

结论

通过本系列文章,db4o 的优势已经体现得淋漓尽致,它的添加、更新、删除是如此的简单,正如 db4o 的口号那样——“仅需一行代码就能存储复杂结构对象,极大的降低了开发时间和成本,提供高效的性能,无需 DBA 干预”。

如本文有不详尽之处,大家可以参考官方的《用户指南》,db4o 中文社区正在火热成长!

参考资料

学习

  • db4o 官方网站 。

  • 面向对象数据库 db4o 之旅系列:查看此系列文章完整列表。

  • ODMG 官方网站:了解 ODMG 技术。

获得产品和技术

  • 下载 db4o 免费版。

转载于:https://my.oschina.net/xionghui/blog/489727

面向对象的数据库db4o: 安装并使用db4o相关推荐

  1. 开源面向对象数据库 db4o 之旅: 初识 db4o“db4o 之旅(一)”

    前言 业界对持久存储领域的追求从未停止过,为了更方便.更容易地用对象表达我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点.最近一年,业界也在反思,到底 ORM 给我们带 ...

  2. 开源面向对象数据库 db4o 之旅: 深入 db4o “db4o 之旅(三)”

    前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 部分:初识 db4o 中,作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较: 在第 2 部分:db4o 查询方式中, ...

  3. MySQL数据库多种安装方法及企业级安装实践

    本文来自老男孩老师第三本书籍著作<老男孩的MySQL私房菜>第三章内容分享! 3.1 MySQL数据库的安装方法及选择 在当今的互联网企业里,MySQL数据库大多运行在Linux系列操作系 ...

  4. linux查看mq死信队列,linux下postgresql 一主多从、redis集群、rabbitmq等环境搭建 (九) xa-rdmp-archiving 从数据库的安装...

    xa-rdmp-archiving 从数据库的安装 切换到 root 帐号 su root 创建好要用到的目录 mkdir -p /xa-rdmp/user/data/pgsql/xa-rdmp-ar ...

  5. 数据库软件安装和数据库创建的几种方法

    数据库软件安装: 图形界面安装 静默方式安装 通过复制已经存在的数据库安装 数据库创建的几种方法 图形界面创建 静默方式创建 利用已经存在的实例创建 通过手工创建 先做总结后期完善. 转载于:http ...

  6. oracle数据库的详细安装,Oracle 11g数据库详细安装图文教程

    本教程为大家分享了Oracle 11g数据库详细安装步骤,供大家参考,具体内容如下 1.先到Oracle官网上下载11g oracle Database 11g第 2 版 (11.2.0.1.0)标准 ...

  7. 用ASP自动生成SQL数据库的安装源程序

    chinaasp论坛完整程序下载: [url]http://www.yescnet.com/manage.asp?url=down/list.asp[/url]**id=89 [url]http:// ...

  8. Mysql数据库的安装教程

    Mysql数据库的安装教程 一.Mysql数据库介绍 二.Mysql数据库特性 1.Mysql现状 2.Mysql的几个特点 三.Mysql数据库中术语介绍 四.检查MySQL 是否安装 1.检测系统 ...

  9. Oracle数据库的安装和配置

    我们今天开始学习ORACLE,ORACLE来学习SQL和PL/SQL,前一个阶段我们已经学习了JAVA基础,Java基础是我们学习的第一个阶段,有了JAVA语言,JAVA应用程序,我们就可以访问WEB ...

  10. Mysqli面向对象操作数据库

    Mysqli面向对象操作数据库 首先配置一下数据库: 接着用PHP中的Mysqli扩展库面向对象查询这个数据表. 操作分为以下几个步骤: 连接数据库 操作数据库 处理结果 关闭资源 <?php$ ...

最新文章

  1. Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
  2. 基于PaddlePaddle的机器翻译教程 | 深度学习基础任务系列
  3. stp协议c语言,STP(生成树协议)
  4. 如何设置SSH访问的时间限制
  5. C#托管代码调用C++非托管代码
  6. wordpress ?php the_time() ?,WordPress时间函数the_time与get_the_time解析
  7. 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)
  8. Javascript 权威指南第五版 手记(1) 引用类型
  9. 不能创建对象qmdispatch_activex部件不能创建对象怎么解决
  10. WebView截取长图
  11. 这次,多地消防控制室双人值守可变单人值守
  12. oracle同义词表不存在,同义词什么时候失效呢?
  13. GitHub Desktop安装与使用教程
  14. 毫米波雷达相关知识调研
  15. Establishing SSL connection without server‘s identity verification is not recommended.
  16. 外部地址是什么意思_NAT网络地址转换
  17. vue上传文件,重新上传后覆盖之前文件
  18. L1-057 PTA使我精神焕发 (5分)(C语言)
  19. Python实现一键自动发送直播弹幕
  20. 单片机利用Proteus进行仿真点亮一个LED灯(C语言和汇编语言)

热门文章

  1. Docker-删除untagged docker images
  2. 航空订票系统设计(java、数据库、通信联合项目)
  3. 玩客云pc端_玩客云下载-玩客云电脑版下载-华军软件园
  4. 苹果电脑系统如果删除驱动
  5. taobao API 错误码一览表
  6. fluidsim元件库下载_FluidSIM4.5免费版
  7. 模拟电路与数字电路基础之模拟信号与数字信号 学习笔记
  8. CF528D. Fuzzy Search [FFT]
  9. 2048游戏简单实现
  10. RGB和RGBA之间的转换