db4o主要的包
com.db4o: 是db4o最经常用到的功能,Db4o类和ObjectContainer接口是这个包最常用到的。Db4o是运行db4o数据库的起点,这个类中的静态方法openFile会以嵌入式的方式打开数据库文件,还可以在开启数据库之前进行 db4o 环境配置。ObjectContainer 接口可在单用户模式下作为数据库实例,也可作为 db4o 服务器的Client。每个 ObjectContainer 实例维护它自己所管理的已存储和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃.
com.db4o.ext:这个包主要是提供比较高级点的功能。每个ObjectContainer 对象也是 com.db4o.ext.ExtObjectContainer对象,可以强转成ExtObjectContainer或者通过ext()方法,以获得更多高级特性。
com.db4o.config: db4o 所需的配置方面的类。
com.db4o.query:db4o的查询接口以及相关的Predicate类等。
打开方式
db4o的数据库文件后缀名是yap.可以用本地模式打开
ObjectContainer db = Db4o.openFile("data.yap");
在这种模式下,同时只能打开一个ObjectContainer,若打开多个会抛出com.db4o.DatabaseFileLockedException 异常,因此比较适合嵌入式的应用。
也可以用服务器模式打开
ObjectServer server=Db4o.openServer("data.yap",9002);//分别是数据库文件名、端口
server.grantAccess("root","root");//设定用户名、密码
然后就可以再客户端打开了
ObjectContainer oc = server.openClient()
或者直接连接
ObjectContainer db=Db4o.openClient("192.168.1.10",9002,"root","root");
.服务器模式下就可以打开多个client,可以用作J2EE应用环境,也可以做一个简单的db4o连接池来动态管理ObjectContainer。
CURD操作
1) set对象:假设有个pojo,如下
public class HttpConfig {
private int maxConnectPerHost;
private int maxTotalConnections;
private int connectTimeout;
private String name;
private String ip;
.....
保存这个对象只需要简单的
ObjectContainer db = Db4o.openFile("data.yap");
db.set(httpConfig);
2) read对象:db4o也有自己的查询方式,分别是QBE(Query by Example)、NQ(Native Queries)、SODA(Simple Object Database Access),接下来分别说下。
QBE: 当利用 QBE 为 db4o 提供模板(example)对象时,db4o 将返回所有和非默认值字段匹配的全部对象,内部是通过反射所有的字段和构造查询表达式(所有非默认值字段结合”AND”表达式)来实现。比如查询name为"hankzhang"的所有HttpConfig对象
ObjectContainer db = Db4o.openFile("data.yap");
try{
//构造模板对象
HttpConfig hc = new HttpConfig();
hc.setName("hankzhang");
//查询对象
List<HttpConfig> list = db.get(hc);
for(HttpConfig httpConfig : list) {
System.out.println(httpConfig.getIP());
}
}finally{
db.close();
}
这种方式比较简单,但是也有明显的缺陷:
1、必须反射模板对象(Example)的所有成员
2、无法执行更进一步的查询表达式(例如 AND、OR、NOT 等等)
3、不能指定约束值 0(int)、""或者 null(对象)等。
SODA:SODA是db4o最底层的查询API,目前SODA中使用字符串来定义字段,这样将不能实现类型安全也无法在编译时检查代码,而且写起来较麻烦.同上的例子,用SODA来做就是
ObjectContainer db = Db4o.openFile("data.yap");
try{
//查询对象
Query query = db.query();
//设置被约束实例
query.constrain(HttpConfig.class);
//设置被约束实例的字段和约束条件
query.descend("name").constrain("hankzhang");
ObjectSet<HttpConfig> list = query.execute();
for(HttpConfig httpConfig : list) {
System.out.println(httpConfig.getIP());
}
}finally{
db.close();
}
Query对象的API内有:sortBy(按字段排序)和 orderAscending(顺序)、orderDescending (逆序)等方法。
NQ:使用NQ,可以保证我们的查询代码是完全的编译期错误检查、类型安全甚至重构。还是上面的例子
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");
}
});
for(HttpConfig httpConfig : list) {
System.out.println(httpConfig.getIP());
}
}finally{
db.close();
}
在db4o内部,会设法把NQ转换成 SODA。
说到查询就不能忘了最常见的分页了,分页的做法简单到不可思议。
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");
}
});
//记录总数
int count = result.size();
//每页三条,分4页,为了方便,假设count大于3*4
for(int i = 0; i < 4; i++){
System.out.println(i + "Page:" + result.get(i*3).getIP());
System.out.println(i + "Page:" + result.get(i*3+1).getIP());
System.out.println(i + "Page:" + result.get(i*3+2).getIP());
}
}finally{
db.close();
}
不要以为写错了,虽然取得了list实例,但是list内只是httpconfig对象在数据库内部的id号而已,只有result.get(i*3).getIP()这样的操作之后,才会去根据id获取真正的对象。
分享到:
相关推荐
"db4o 使用指南" db4o 是一个开源的面向对象数据库,能够轻松地将 Java 对象持久化到数据库中。本文将详细介绍 db4o 的安装、启动、...db4o 是一个功能强大且易于使用的面向对象数据库,能够满足各种应用场景的需求。
Db4o,全称为“Database for Objects”,是一个开源的对象数据库管理系统,主要应用于Java和.NET平台。这个项目专注于提供一种简单的方式来存储和检索Java对象,无需SQL或其他中间映射层。在“Db4o的简单操作项目”...
总的来说,《db4o 权威指南》是一本全面覆盖db4o特性和实践的资源,对于想要深入理解和使用db4o的Java开发者来说,是一份宝贵的参考资料。通过阅读这本书,开发者能够掌握面向对象数据库的核心概念,提升开发效率,...
db4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接将Java或.NET对象存储到数据库中,无需进行ORM(对象关系映射)。db4o的目标是简化数据管理,提供更接近自然编程的方式,使开发过程更加...
**db4o(Database for Objects)** 是一个开源的对象数据库管理系统(Object-Relational Mapping,ORM),它允许开发者直接在Java或.NET平台上存储和检索Java对象或.NET对象,无需进行SQL查询或者映射过程。db4o的...
《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.《DB4O系统应用之起步篇》.
#### 一、db4o简介与安装 db4o是一款开源的对象数据库系统,支持Java、.NET 和 Mono等平台。本教程旨在帮助用户快速掌握db4o的基本用法,并提供丰富的资源以支持开发者深入学习。 在开始之前,请确保从db4o官方...
db4o(Database for Objects)是一个开源的对象数据库系统,专注于在.NET Framework 3.5环境下存储和检索对象。它允许开发者直接使用.NET类作为数据库模型,无需进行传统的映射过程,极大地简化了数据管理。这个标题...
3. **对象查询**:db4o使用一种称为OQL(Object Query Language)的查询语言,它是对SQL的面向对象扩展。OQL允许开发者根据对象的属性和关系进行查询,使得数据检索更加直观和高效。 4. **版本控制**:db4o支持对象...
通过NQ,可以方便地实现对对象属性的匹配,如查询所有年龄大于30的人,只需创建一个年龄为30的对象,然后使用db4o的query()方法进行查找。 **三、SDOA(SODA - Simple Object Database Access)** SDOA是db4o提供的...
在`DrawTools2005`这个示例程序中,可能展示了如何使用db4o来存储和检索图形工具相关的对象。例如,可能会有一个`Shape`类,包含位置、大小、颜色等属性,以及一个`Drawing`类,包含多个`Shape`对象。开发者可以轻松...
db4o是一个专为Java和.NET开发者设计的开源、轻量级的纯面向对象数据库引擎,提供了一种简单易用的方式来实现对象持久化。这款数据库引擎已被验证具备优秀的性能,根据描述中的基准测试,db4o在与传统持久化方案的...
DB4O,全称为“Database for Objects”,是一个开源的对象数据库管理系统(ODBMS),它允许开发者直接将Java或.NET对象持久化到磁盘上,而无需使用传统的关系型数据库中的SQL语句。DB4O提供了简单、高效且灵活的数据...
- 打开一个DB4O库:首先,你需要创建一个`Configuration`实例,并使用`Db4o.openServer()`或`Db4o.openClient()`方法来连接或打开数据库。这通常涉及到指定数据库的URL、端口以及配置参数。 - 存储对象:使用`...
db4o(又名Database for Objects)是一款开源的对象导向数据库系统,专为Java和.NET开发者设计,旨在简化开发流程并提升性能。它的核心特性在于其对象导向数据库引擎,允许开发者直接使用编程语言中的对象进行数据...
DB4O(Database for Objects)是一款开源的对象数据库管理系统(Object-Relational Mapping,ORM),它允许开发者将Java或.NET对象直接存储到磁盘上,无需转换为传统的表和列的结构。DB4O的设计理念是简化数据存储,...
2. **透明性**:Db4o的设计目标之一是尽可能减少数据库操作对代码的影响。开发者可以像操作普通对象一样操作持久化的对象,无需额外的API调用或SQL语句。 3. **查询API**:Db4o提供了强大的查询机制,包括激活查询...
DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接将对象持久化到数据库中,无需进行额外的映射或者数据访问层(DAL)的开发。这个数据库系统设计的目标是简化对象关系映射(ORM)的过程,...
总之,db4o-5.0-tutorial-java帮助文档不仅是一份详细的使用指南,也是新老开发者掌握db4o技术的重要参考资料。无论是初学者还是有经验的开发者,都能从中获得有价值的信息,加速学习进程,提高工作效率。