3)delete,update对象
把这两个操作放一起,是因为它们都跟一个东东:更新深度 有关系。
对于更新,代码是很简单的,还是拿那个例子来看。
ObjectContainer db = Db4o.openFile("data.yap");
try{
ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
public boolean match(HttpConfig hc) {
return hc.getName().equals("hankzhang");
}
});
HttpConfig httpConfig = result.next();
//修改地址
httpConfig.setIP("172.16.60.26");
db.set(httpConfig);
}finally{
db.close();
}
但是如果httpConfig对象里面有个成员变量不是基本的java类型,是个自定义的对象,比如有这么个属性
private TaskConfig config;
会发现,如下代码不能起到作用。
ObjectContainer db = Db4o.openFile("data.yap");
try{
ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
public boolean match(HttpConfig hc) {
return hc.getName().equals("hankzhang");
}
});
HttpConfig httpConfig = result.next();
//修改地址
httpConfig.setIP("172.16.60.26");
//修改内部自定义对象
httpConfig.setTaskConfig(new TaskConfig());
db.set(httpConfig);
}finally{
db.close();
}
即使设置了新的值,仍然修改不成功。这是因为 假设内部的成员对象比较复杂而且成员对象还能继续追溯下去,则更新一个对象,就需要对这些所有的对象都做更新,也就是 级联更新,这将引起很大的性能问题。因此默认情况下,只有基本的数据类型才会被修改到,如果确实要更新自定义的对象,就需要做级联设置。
//级联设置
Db4o.configure().objectClass(HttpConfig.class.getName()).cascadeOnUpdate(true);
ObjectContainer db = Db4o.openFile("data.yap");
try{
ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
public boolean match(HttpConfig hc) {
return hc.getName().equals("hankzhang");
}
});
HttpConfig httpConfig = result.next();
//修改地址
httpConfig.setIP("172.16.60.26");
//修改内部自定义对象
httpConfig.setTaskConfig(new TaskConfig());
db.set(httpConfig);
}finally{
db.close();
}
删除对象,代码类似
ObjectContainer db = Db4o.openFile("data.yap");
try{
ObjectSet<HttpConfig> result = db.query(new Predicate<HttpConfig>() {
public boolean match(HttpConfig hc) {
return hc.getName().equals("hankzhang");
}
});
HttpConfig httpConfig = result.next();
db.delete(httpConfig);
}finally{
db.close();
}
如果需要级联删除的话,就需要在最前面加上
Db4o.configure().objectClass(HttpConfig.class.getName()).cascadeOnDelete(true);
Db4o连接池
这个东西db4o没有相应实现,而且存在很大的争议性。如果没有连接池,每次都要使用都要open,close数据库文件,而这两个操作恰好是非常频繁的;如果加入连接池,因为每个ObjectContainer都有自己的事务,所有的操作都有事务保证。当打开 ObjectContainer,就已经进入事务了,commit() 或 rollback() 时,下一个事务立即启动。每个 ObjectContainer 实例维护它自己所管理的已存储和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃。个人觉得,如果只是用来做本地应用的数据库,而且数据都是简单CURD操作,可以采取连接池的方式。
要实现也是比较容易的,实现打开一定数量的ObjectContainer,用个List<ObjectContainer>来保存。每次都从list中取出实例来用,用完返回到池内。
ExtObjectContainer
ExtObjectContainer是ObjectContainer的子接口,它可以通过ObjectContainer实例的ext()方法得到。主要是进行一些其他的操作,比如getID(Object obj)得到对象的内部id,getObjectInfo(Object obj)得到对象的信息,getByID(long arg0)根据ID得到对象,getByUUID(Db4oUUID arg0)通过UUID得到对象,purge(Object obj)等。
ObjectManager
这个是db4o的数据库管理工具,个人感觉不是很好用,对于基本的只读查看操作,自己个人做个web页面工具,就像h2database那样的,还是比较麻烦的,希望开发团队在新版本能注意到这方面的问题。如下是这个工具的的截图,网上google出来的:
- 大小: 46.8 KB
分享到:
相关推荐
"db4o 使用指南" db4o 是一个开源的面向对象数据库,能够轻松地将 Java 对象持久化到数据库中。本文将详细介绍 db4o 的安装、启动、查询方式、对象持久化、数据库文件结构、主要包结构等知识点。 一、db4o 安装和...
在“Db4o的简单操作项目”中,我们将探讨如何使用Db4o进行基本的数据操作,包括对象的持久化、查询以及事务管理。 首先,你需要访问db4o的官方网站(http://www.db4o.com)来获取最新的Db4o版本。下载完成后,将jar...
在面向对象数据库领域,db4o的独特之处在于它的透明性。这意味着开发者可以直接操作对象,db4o会自动处理对象的序列化、存储和检索。书中会详细讲解这一特性,帮助读者理解如何充分利用这一优势来提高开发效率。 ...
### 二、db4o 8.0 新特性 1. **性能优化**:db4o 8.0对查询引擎进行了优化,提高了查询速度和整体性能,尤其在大数据量的场景下表现更佳。 2. **事务支持**:提供了更强大的事务管理,确保数据的一致性和完整性,...
**全部说明文档** 是学习和使用db4o的关键资源,包括API参考、教程、最佳实践和常见问题解答等。这些文档帮助开发者快速上手,解决在实际项目中遇到的问题。 **对象数据库** 与关系型数据库不同,对象数据库直接...
《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.
#### 二、db4o-7.12 .NET 发行版安装与结构 db4o-7.12 的 .NET 版本提供了一个MSI安装包(db4o-7.12-net.msi)。安装后,您将看到以下目录结构: - **db4o-7.12/doc/**:此目录包含了db4o的API文档、参考文档、...
在实际使用中,开发者可以下载db4o的库文件(如压缩包中的"db4o-8.0"),将其引入到项目中,然后通过简单的API调用来实现对象的存储和查询。尽管db4o已经停止了官方的更新和支持,但它的设计理念和实现方式仍然对...
这个标题暗示我们将讨论的是db4o与.NET Framework 3.5的集成和使用。 ### 1. 对象数据库 对象数据库与关系型数据库的主要区别在于,它存储和查询的是对象而非表格数据。db4o将对象的实例直接保存到数据库中,使得...
通过NQ,可以方便地实现对对象属性的匹配,如查询所有年龄大于30的人,只需创建一个年龄为30的对象,然后使用db4o的query()方法进行查找。 **三、SDOA(SODA - Simple Object Database Access)** SDOA是db4o提供的...
在`DrawTools2005`这个示例程序中,可能展示了如何使用db4o来存储和检索图形工具相关的对象。例如,可能会有一个`Shape`类,包含位置、大小、颜色等属性,以及一个`Drawing`类,包含多个`Shape`对象。开发者可以轻松...
这款数据库引擎已被验证具备优秀的性能,根据描述中的基准测试,db4o在与传统持久化方案的对比中排名第二,仅次于JDBC,且明显优于使用Hibernate/HSQLDB的方案,证明了面向对象并不一定意味着性能损失。 ### 1. db4...
2. **透明性**:Db4o的设计目标之一是尽可能减少数据库操作对代码的影响。开发者可以像操作普通对象一样操作持久化的对象,无需额外的API调用或SQL语句。 3. **查询API**:Db4o提供了强大的查询机制,包括激活查询...
这篇文档是DB4O Java开发应用的起步篇,主要介绍了如何开始使用DB4O进行开发。 1. 起步: - 下载后的目录结构:当你下载DB4O后,会包含一系列的JAR文件和相关的文档。这些JAR文件包含了DB4O引擎的所有类库,需要将...
DB4O,全称为“Database for Objects”,是一个开源的对象数据库管理系统(ODBMS),它允许开发者直接将Java或.NET对象持久化到磁盘上,而无需使用传统的关系型数据库中的SQL语句。DB4O提供了简单、高效且灵活的数据...
3. **Source**:源代码文件夹,里面包含有DB4O管理工具的源代码,用户或开发者可以查看和修改这些代码以定制工具的功能或者进行二次开发。 通过这个管理工具,用户可以进行以下操作: 1. **数据浏览**:查看数据库...
2. **原生数据库**:db4o是100%原生的面向对象数据库,它直接支持对象的存取,无需额外的ORM层。这使得对象可以直接序列化到数据库中,简化了开发流程。 3. **高性能**:官方的基准测试显示,db4o在某些场景下的...
### 二、db4o的下载与安装 #### 1. 获取db4o 在开始使用之前,确保从db4objects的官方网站下载最新的db4o发行版本。官方网站提供了db4o的不同版本,包括Java、.NET和Mono等,根据自己的开发环境选择合适的版本。 ...
2. **DB4o安装与配置**: 在使用DB4o前,你需要下载并安装其SDK,然后在VS2008项目中添加引用。配置数据库连接时,可以设置数据库文件路径,也可以选择内存数据库。 3. **对象持久化**: DB4o提供了简单易用的API...