------- android培训、java培训、期待与您交流! ----------
BerkeleyDB JE
一、简介
Berkeley DB Java Edition (JE)是完全用Java编写的嵌入式内存数据库
特点:
1、 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE
2、多线程支持,JE使用超时的方式来处理线程间的死琐问题
3、Database都采用简单的key/value对应的形式
4、事务支持
5、允许创建二级库,可以方便的使用一级key,二级key来访问我们的数据
6、支持RAM缓冲,这样就能减少频繁的IO操作
7、支持日志
8、数据备份和恢复
9、游标支持
二、Programming with the Base API
数据库Environment对象封装一个或多个Database对象,通过Environment对象打开、删除、重命名数据库,总之数据库环境维护数据库信息
1、打开数据库环境(Environment)
需要指明数据库home目录和数据库环境配置
2、打开数据库
openDatabase(Transaction txn, String databaseName,DatabaseConfig dbConfig)
3、操作数据库
每一条database记录由两个DatabaseEntry组成,代表key/value
如果原始记录为:String aKey = “key”;String aData = “data”;
通过DatabaseEntry的构造方法将key/value封装成DatabaseEntry:
可以看出,字符串类型的key/value需要转化成二进制数组,再被封装。同样的,任何类型的key/value都需要处理成二进制数组,再被封装。
那么如何获取封装在DatabaseEntry里面的key/value:
根据面向对象的方法,DatabaseEntry肯定提供这样的方法,就是DatabaseEntry.getData
构造DatabaseEntry的方法2(Bind API):
通过Bind API能够封装基本数据类型和序列化的对象
1)创建EntryBinding对,调用TupleBinding.getPrimitiveBinding来获取绑定
2)使用EntryBinding对象,将基本数据类型封装到DatabaseEntry里面
一旦封装成DatabaseEntry对象,就能进行数据库的记录操作
获取封装在DatabaseEntry里面的基本数据类型:
根据面向对象的思想,一定是调用EntryBinding的方法,EntryBinding.entryToObject
使用BindAPI存储序列化对象的方法:
1)要存储对象必须实现Serializable接口
2)创建两个数据库,一个用来存储数据,另一个用来存储class信息
3)实例化一个class目录,使用com.sleepycat.bind.serial.StoredClassCatalog
4)创建EntryBinding,这里用其子类SerialBinding
5)通过EntryBinding的方法,将序列化对象存入DatabaseEntry
获取封装在DatabaseEntry里面的序列化对象:
根据面向对象的思想,流程同上,且是调用EntryBinding的方法,entryToObject
将记录写入数据库:
根据面向对象的方法,一定是调用Database对象的方法,因此还是需要查阅API文档
Database.put():
Database.putNoOverwrite():
Database.putNoDupData():
根据面向对象的方法,一定是调用Database对象的方法,注意读取的数据一定是存放在空DatabaseEntry里面,详细查阅API文档
Database.get():
Database.getSearchBoth():
从数据库根据key删除记录:
根据面向对象的方法,一定是调用Database对象的方法
Database.delete():