本篇开始介绍使用比较器
JE中的数据库内部是使用B树来组织的,这意味着大多数数据库操作(插入,删除,读取,等等)涉及B树节点的比较。这种比较一般情况下是基于记录的键,但是如果你的数据库支持重复数据,那么比较也会涉及到记录的值。
默认情况下,JE使用一个一个字节来进行字典比较(byte-by-byte lexicographic comparison)。这种机制适用于大多数的数据。然而,在某些情况下,你也可以使用自定义的比较器,比如说你要执行一个跟语言相关的记录键的字符串比较(perform a language sensitive lexical ordering of string keys)。
要创建一个自定义的比较器非常简单,你只要实现java中的Comparator接口即可。JE会为 Comparator.compare()方法传递以字节数组存在于数据库中的参数。
下面我们演示一个例子,我们想自定义一个比较器,不使用字节数组而是使用字符串来进行比较:
public class MyDataComparator implements Comparator {
public MyDataComparator() {}
public int compare(Object d1, Object d2) {
byte[] b1 = (byte[])d1;
byte[] b2 = (byte[])d2;
String s1 = new String(b1, "UTF-8");
String s2 = new String(b2, "UTF-8");
return s1.compareTo(s2);
}
}
要使用这个比较器,你可以使用以下的方法。
- DatabaseConfig.setBtreeComparator()
用于比较数据库中记录的键。
- DatabaseConfig.setDuplicateComparator()
用于比较允许重复数据的数据库中的重复记录的值。
你也可以覆盖默认的比较器,通过使用以下的方法。
- DatabaseConfig.setOverrideBtreeComparator()
指定覆盖B书节点的比较器
- DatabaseConfig.setOverrideDuplicateComparator()
指定覆盖重复记录的比较器
这两者之间的不同,我现在还不太清楚o(╯□╰)o有一点需要注意,不管你用什么比较器,返回的顺序都应该是一样的。也就是说新的比较器和旧的比较器对同一个记录进行比较必须返回相同的值。
下面演示使用自定义的比较器
try {
// Get the database configuration object
DatabaseConfig myDbConfig = new DatabaseConfig();
myDbConfig.setAllowCreate(true);
// Set the duplicate comparator class
myDbConfig.setDuplicateComparator(MyDataComparator.class);
// Open the database that you will use to store your data
myDbConfig.setSortedDuplicates(true);
Database myDatabase = myDbEnv.openDatabase(null, "myDb", myDbConfig);
} catch (DatabaseException dbe) {
// Exception handling goes here
}
分享到:
相关推荐
Oracle BerkeleyDB-JE je-6.0.11
BerkeleyDB-Core-C-GSG.pdf bdb c开发手册 英文版
Berkeley DB JE-7.0.6 jar包
Java-Edition-BerkeleyDB-3.1.0,国外的开源数据库,供大家参考
(二) Berkeley DB -- Access Method Configuration_iyangjian2005997_新浪博客.mht
BerkeleyDB和Sqlite是当前最流行的嵌入式开源数据库。
db-6.1.26.tar.gz berkeley db
Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht
Life After BerkeleyDB- OpenLDAP's Memory-Mapped Database
关于berkeley db 4.6.2的介绍性文章,是了解berkeley db的技术文档。
berkeley db je-6.4.9.gz
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤,本文件是早期版本
嵌入式数据库,功能强大,可用于如QQ本地的聊天记录数据库等,使用方便,效率高
官方版本,亲测可用
Berkeley DB 4.4.20 .tar.gz 来自https://www.oracle.com/database/technologies/related/berkeleydb-release-history.html
来自于oracle的BerkeleyDB帮助文件,里面有代码的。
1. Introduction to Berkeley DB ......... 1 About This Manual .......... 2 Berkeley DB Concepts ........... 2 Access Methods ......... 4 Selecting Access Methods ......... 4 Choosing between BTree and ...
文件类型的DB,存取速度快,操作方便,是以map方式key-value方式存取数据.兄弟大家共享!
BerkeleyDB:BerkeleyDB-对Berkeley DB 2.x或更高版本的Perl5访问
使用BerkeleyDB数据库,java语言开发需要的jar包资源,7.5.11版本