面向对象的数据库db4o: 安装并使用db4o

下载和安装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;
    }

    @Override
    public 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;
    }

    @Override
    public 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;
    }

    @Override
    public String toString() {
	return "UserVO [userName=" + userName + ", password=" + password + "]";
    }
}

增加(Create)

public static void main(String[] args) {
    UserVO vo = new UserVO("admin", "1");
    // 打开数据库,ip为服务器ip
    ObjectContainer 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的UserVO
		return vo.getUserName().equals("admin");
	    }
	});
	if (result.size() != 1) {
	    throw new RuntimeException("size does not matched.");
	}
	UserVO vo = result.next();
	// 修改passport
	vo.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 {
	db.delete(vo);
	db.commit();
    } catch (Exception e) {
	db.rollback();
    } finally {
	// 关闭连接
	db.close();
    }
}

结论

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

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

参考资料

学习

获得产品和技术

时间: 2025-01-17 06:23:13

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

面向对象的数据库db4o: 初识db4o

前言 业界对持久存储领域的追求从未停止过,为了更方便.更容易地用对象表达我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点.最近一年,业界也在反思,到底 ORM 给我们带来的是便利还是麻烦.矛头指向大名鼎鼎的 Hibernate ,纷纷议论其性能问题,大家似乎要达成这样的共识:"在业务逻辑复杂的地方用 SP ,而一般的 CRUD 还是 Hibernate ",就连全球知名的 BearingPoint 也有类似看法.下面一个简单的例子,说明了传统 ORM 工

C#面向对象之数据库(理论、插入、修改、删除、查询)

1.数据库的作用:不仅仅是存储,更重要的是将数据进行存储以后怎么样才能方便快捷的查询修改 2.数据库的特点:海量存储.查找速度快.并发性问题控制.安全性.数据完整性(保存在数据库中的数据是正确的.真是的) 3.数据库管理软件:SQL Server Management System 数据库软件:SWL Server以服务的方式存在 数据库文件:itcast.mdf 管理软件向数据库服务发出指定,数据库服务指向到具体的数据库文件 4.SQL 是一种语言 结构化查询语言 SQL Server也是一种

mysql数据库的安装以及常见优化设置

原文:mysql数据库的安装以及常见优化设置 本文根据优才网课程整理,面向web开发者,内容以实用为主,专业DBA可以绕行. 如果你在大公司,可能有专门的DBA来做这些事情,如果你在一个小公司当架构师或者技术总监,或者你自己创业,那DBA的活你也得干了.咱们来讲一下基本的mysql安装和优化. 一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单:RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo a

Sql Server 2012数据库的安装【自己一点一点敲的】

Sql Server 2012数据库的安装 1.到微软官网上下载 下载链接为:https://www.microsoft.com/zh-cn/download/details.aspx?id=29066 点击下载-->点击文件名(全选)-->点击Next,开始下载. 2.下载完成后,装载以.iso为扩展名的光盘镜像文件 右击文件-->点击装载-->出来下图所示页面 点击setup-->打开安装中心(如果是win7以上的版本,右击-->以管理员身份运行)-->出现如

CentOS6.4下Mysql数据库的安装与配置

转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--CentOS下j2ee环境搭建),如果要开发web项目,我们当然可以安装一个myeclipse到Linux系统上去,这个安装方法和安装eclipse完全相同

CentOS下MYSQL数据库的安装

关于在Centos系统下安装MYSQL数据库,网络上资料有很多,在此主要感谢该文章的博主:http://www.cnblogs.com/zhoulf/archive/2013/01/25/zhoulf.html,因为相对来说,该篇文章具有很强的操作性.此文将在汇集众多资料的基础上,记录本人安装MYSQL的全过程. 一.配置环境与软件版本: 1.Centos版本:6.3版32位系统: 2.CMake版本:cmake-2.8.4.tar.gz: 3.Mysql版本:mysql-5.5.11.tar.

Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--CentOS下j2ee环境搭建),如果要开发web项目,我们当然可以安装一个myeclipse到Linux系统上去,这个安装方法和安装eclipse完全相同

查看oracle数据库是否安装好

1.运行->cmd 2.输入sqlplus “as sysdba” 以 特殊身份登录到数据库 3. 验证数据库是否成功安装 输入select status from v$instance; 若显示数据库实例处于OPEN状态,则说明oracle数据库成功安装

Linux CentOS6.4下Mysql数据库的安装与配置

一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱不得不首先推荐的是mysql数据库了,而且Mysql数据库的第一个版本就是发行在Linux系统上的. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内