(转)直接保存对象的数据库——db4o
在实际开发中,数据的存储是必不可少的,常用的有数据库存储和文件存储。数据库目前有关系型数据库和文档型数据库(No-SQL)。关系型数据库以字段、类型、约束、表关系来存储和管理数据,比较常见的比如Oracle、MySql等都属于RDBMS,文档型数据库是一种可分布式的文档结构数据库,没有关系型数据库中传统意义上的表,比较常见的比如MongoDB、CouchDB等。
今天主要介绍下,在java开发中,利用第三方开源项目db4o如何直接将对象保存到数据库,而非将对象中属性拆解出来后再保存,这样操作起来更快捷、更直观。db4o目前支持Java和.Net平台,它的原理其实就是将对象保存到文件中,但是使用上和传统的数据库没有区别。先来看看db4o和关系型数据库保存数据的方式:

从上图可以看出,db4o更直接。ok,还是直接看使用吧:
从官网下载jar包后,添加到工程中(别忘了添加路径),首先是获取数据库引用:
String DATABASE_PATH = this.getFilesDir().getAbsolutePath() + "/testdb4o";
//获取指定路径下数据库引用
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), DATABASE_PATH);
//插入
Student student1 = new Student("Ryan", 24);
Student student2 = new Student("TangRen", 23);
db.store(student1);
db.store(student2);
db.commit();//注意别忘了commit,否则数据更改不生效,机制类似一般的SQL数据库
//查询
Student queryOBJ = new Student();
//设置查询条件
// queryOBJ.setAge(23);
ObjectSet<Student> result = db.queryByExample(queryOBJ);
while(result.hasNext()){
Student st = result.next();
System.out.println("Name:"+st.getName());
System.out.println("Age:"+st.getAge());
}
插入成功,输出结果如下:

//删除指定对象(删除全部则不设置条件)
Student deleteOBJ = new Student();
deleteOBJ.setAge(23);
ObjectSet<Student> resultObjectSet = db.queryByExample(deleteOBJ);
while(resultObjectSet.hasNext()){
Student ss = resultObjectSet.next();
db.delete(ss);
}
db.commit();
输出结果:

//修改
Student updateOBJ = new Student();
updateOBJ.setName("Ryan");
ObjectSet<Student> objectSet = db.queryByExample(updateOBJ);
if (objectSet.hasNext()) {
Student stu = objectSet.next();
stu.setAge(25);
db.store(stu);
db.commit();
}
输出结果:

到此就简单介绍了一下db4o的使用,感兴趣的同学可以深入研究一下,给出两个参考网站:
http://www.db4o.com/DownloadNow.aspx
这是群里一个朋友写的总结,大家可以参考下:http://blog.csdn.net/u011290399/article/details/9263777
转载自:http://blog.csdn.net/ryantang03/article/details/8248834
(转)直接保存对象的数据库——db4o的更多相关文章
- 保存对象时碰到的问题-列名 'Discriminator' 无效
今天保存对象时碰到问题: {"列名 'Discriminator' 无效.\r\n列名 'Discriminator' 无效."} 百度了一下,百度找到的一个解决: http:/ ...
- 使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly错误
使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOn ...
- 关于SessionFactory的不同实现类分别通过getCurrentSession()方法 和 openSession() 方法获取的Session对象在保存对象时的一些区别
一.单向多对一关联关系 一).使用LocalSessionFactoryBean类,即在applicationContext中配置的 <!-- 配置SessionFactory 使用LocalS ...
- pandas数据保存至Mysql数据库
pandas数据保存至Mysql数据库 import pandas as pd from sqlalchemy import create_engine host = '127.0.0.1' port ...
- 配置NHibernate将枚举保存为Oracle数据库中的字符串
假设有这样一个枚举: /// <summary> /// 字典项类型 /// </summary> public enum DicItemType { [EnumDescrip ...
- 使用command对象操作数据库
1.Command对象查询数据库 protected void Button1_Click(object sender, EventArgs e) { //读取web.config节点配置 strin ...
- MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限
查看数据库的表的时候报如下错误: MSSQL 拒绝了对对象 ) 解决方法: 在数据库里相应的用户权限中,把db_denydatareader的复选框的勾去掉.db_denydatareader是拒绝访 ...
- 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限。
如果在调试过程中出现异常“拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限.”则可以通过以下方式解决: 打开master数据库,打开扩展 ...
- ORMBase对象/关系型数据库映射在MVC中的应用
ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的.它到底是个什么东西呢,我们先来看看一些对它的含义解释. 对象/关系数据库映射(object/relational mapping(ORM)) ...
随机推荐
- iPhone应用程序间传递数据
前一篇简单的介绍了iPhone应用程序间通信,主要是通过在被调用应用的Info.plist中加入URL方案,在应用中通过openUrl来实现程序的调用.而应用程序间的数据传递则可以更具url来实现,例 ...
- android .9.png ”点九” 图片制作方法
“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向, ...
- Hibernate介绍
1.什么是Hibernate? 首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等. 并且Hibern ...
- linux文件解-压缩
常用: 解压tar.gz包 使用命令:tar -zxvf file.tar.gz -z 指有gzip的属性 -x 解开一个压缩文件的参数 -v解压过程中显示文件 -f放最后接filena ...
- CSS Hack是什么意思
CSS hack由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效 ...
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey>
转自:http://hi.baidu.com/taotaowyx/blog/item/074bb8d83907bb3233fa1ce6.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群 ...
- iOS 中实现随机颜色
开发中为了测试能够快速看到效果很多时候我们对颜色采用随机颜色 代码块如下 UIColor * randomColor= [UIColor colorWithRed:((float)arc4random ...
- Python新手学习基础之运算符——比较运算符
比较运算符 比较运算符可以使用比较两个值,所有的内建类型都支持比较运算.当用运算符比较两个值时,结果是一个逻辑值,不是True,就是False. 有一点要注意的是,不同的类型的比较方式不一样,数字类型 ...
- 较优H圈matlab实现
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang %解决完备图中的较优H圈 clc clear w = [ inf 6 1 8 3 1 ;... ...
- cf C. Vasya and Robot
http://codeforces.com/contest/355/problem/C 枚举L和R相交的位置. #include <cstdio> #include <cstring ...