在实际开发中,数据的存储是必不可少的,常用的有数据库存储和文件存储。数据库目前有关系型数据库和文档型数据库(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/about/productinformation/whitepapers/db4o%20Whitepaper%20-%20The%20Database%20Behind%20the%20Brains.pdf

http://www.db4o.com/DownloadNow.aspx

Demo下载

这是群里一个朋友写的总结,大家可以参考下:http://blog.csdn.net/u011290399/article/details/9263777

转载自:http://blog.csdn.net/ryantang03/article/details/8248834

(转)直接保存对象的数据库——db4o的更多相关文章

  1. 保存对象时碰到的问题-列名 'Discriminator' 无效

    今天保存对象时碰到问题: {"列名 'Discriminator' 无效.\r\n列名 'Discriminator' 无效."}  百度了一下,百度找到的一个解决: http:/ ...

  2. 使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly错误

    使用JPA保存对象时报nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOn ...

  3. 关于SessionFactory的不同实现类分别通过getCurrentSession()方法 和 openSession() 方法获取的Session对象在保存对象时的一些区别

    一.单向多对一关联关系 一).使用LocalSessionFactoryBean类,即在applicationContext中配置的 <!-- 配置SessionFactory 使用LocalS ...

  4. pandas数据保存至Mysql数据库

    pandas数据保存至Mysql数据库 import pandas as pd from sqlalchemy import create_engine host = '127.0.0.1' port ...

  5. 配置NHibernate将枚举保存为Oracle数据库中的字符串

    假设有这样一个枚举: /// <summary> /// 字典项类型 /// </summary> public enum DicItemType { [EnumDescrip ...

  6. 使用command对象操作数据库

    1.Command对象查询数据库 protected void Button1_Click(object sender, EventArgs e) { //读取web.config节点配置 strin ...

  7. MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限

    查看数据库的表的时候报如下错误: MSSQL 拒绝了对对象 ) 解决方法: 在数据库里相应的用户权限中,把db_denydatareader的复选框的勾去掉.db_denydatareader是拒绝访 ...

  8. 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限。

    如果在调试过程中出现异常“拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限.”则可以通过以下方式解决: 打开master数据库,打开扩展 ...

  9. ORMBase对象/关系型数据库映射在MVC中的应用

    ORM这个字眼在我们操作数据库的时候,是我们使用频率最高的.它到底是个什么东西呢,我们先来看看一些对它的含义解释. 对象/关系数据库映射(object/relational mapping(ORM)) ...

随机推荐

  1. JavaScript经典魔力代码

    是什么使得JavaScript不同于其他程序设计语言,在浏览器修饰方面表现出其优异的特性?毫无疑问,JavaScript在Web应用领域受到的好评,既源于它自身灵活的动态特性,也源于浏览器对它充分的支 ...

  2. 数据库系统原理及其应用总结---ShinePans

    第一章  数据库概论 1.在数据库管理技术的发展过程中.数据库独立性最高的是"数据库系统"阶段 2.三大经典的数据结构模型是"关系.层次和网状模型" 3.单个用 ...

  3. 开源中国安卓client源代码学习(一) 渐变启动界面

    开源中国安卓client源代码学习(一) 渐变启动界面 准备学习安卓开发, 看到网上有人推荐开源中国安卓client的源代码, 说里面包括了大部分技术, 于是准备好好研究研究. 特开通此系列博客来记录 ...

  4. 忽略git中不需要进行版本管理的文件

    在git中我们提交项目的时候有很多东西是不需要进行版本管理的,因此我们需要忽略掉. 虽然在github2.0的windows客户端提供了工具,但是这个工具并不是想象中的那么好用. 在上面点右键出现的D ...

  5. Linux命令之文件与用户权限

    1.文件管理 在Linux里,任何软件和I/O设备都被视为文件.Linux中的文件名最大支持256个字符,分别可以用A-Z.a-z.0-9等字符来命名. 和Windows不同,Linux中文件是区分大 ...

  6. Android Activity 分类

    在安卓系统中,Activity 按照优先级可以分为三种: 1. 前台Activity,是指正在和用户进行交互的Activity,优先级最高: 2.可见但非前台Activity,是指可见但无法与用户进行 ...

  7. 【转】C++成员函数的存储方式

    [转] http://c.biancheng.net/cpp/biancheng/view/187.html 用类去定义对象时,系统会为每一个对象分配存储空间.如果一个类包括了数据和函数,要分别为数据 ...

  8. hadoop文本转换为序列文件

    在以前使用hadoop的时候因为mahout里面很多都要求输入文件时序列文件,所以涉及到把文本文件转换为序列文件或者序列文件转为文本文件(因为当时要分析mahout的源码,所以就要看到它的输入文件是什 ...

  9. SmartQQ二维码登陆接口分析

    SmartQQ是腾讯在Web上推出的一款单纯的聊天工具,pc端与移动端都可以访问,接下来具体的分析下登陆流程. 网站:http://w.qq.com/ 工具:这个随意能够看到http数据包就可以,浏览 ...

  10. php 之 数据访问 查询关键字 (0506)

    根据数据库中的car表做一个汽车查询页面:  一.一个关键字查询: 主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transiti ...