package test;
import com.sleepycat.je.*;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.bind.serial.SerialBinding;
import java.io.File;
public class test {
public static void main(String[] args) {
}
/**
* 打开和关闭环境,示例一
*
*/
public void eg1(){
//----打开环境,如果不存在,则创建一个------------
Environment myDbEnvironment=null;
try {
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true); //true不存在就创建,false如果不存在则打开环境失败
//envConfig.setReadOnly(true); //true 以只读方式打开,如果是多进程应用,每个进程都要设置为true
//envConfig.setTransactional(true);//true支持事务,false不支持,默认false。可以更改配置文件来设置此参数。
myDbEnvironment = new Environment(new File(".//"), envConfig);//环境所在路径
java.util.List myDbNames = myDbEnvironment.getDatabaseNames(); //得到所有的数据库的名字
for(int i=0; i < myDbNames.size(); i++) {
System.out.println("Database Name: " + (String)myDbNames.get(i));
}
} catch (DatabaseException dbe) {
// 错误处理
}
//----关闭环境----------------
try {
if (myDbEnvironment != null) {
myDbEnvironment.cleanLog(); //在关闭前也最好执行一下cleaner,清理一下日志文件,因为delete操作会浪费一些空间
myDbEnvironment.close();
}
} catch (DatabaseException dbe) {
// 错误处理
}
}
/**
* 打开环境示例二
*
*/
public void eg2()
{
Environment myEnv = null;
try{
myEnv=new Environment(new File("/export/dbEnv"), null);
EnvironmentMutableConfig envMutableConfig = new EnvironmentMutableConfig();
envMutableConfig.setCachePercent(50);//设置je的cache占用jvm 内存的百分比。
//envMutableConfig.setCacheSize(123456);//设定缓存的大小为123456Bytes
envMutableConfig.setTxnNoSync(true);//设定事务提交时是否写更改的数据到磁盘,true不写磁盘。
//envMutableConfig.setTxnWriteNoSync(false);//设定事务在提交时,是否写缓冲的log到磁盘。如果写磁盘会影响性能,不写会影响事务的安全。随机应变。
myEnv.setMutableConfig(envMutableConfig);
EnvironmentStats envStats=myEnv.getStats(null);//调用 Environment.getStats() 返回一个EnvironmentStas对象。调用EnvironmentStats.getNCacheMiss()看命不中数。
long cacheMisses = envStats.getNCacheMiss(); //这个统计非常重要,尤其针对于长时间运行的应用。 它返回不能够在内存中命中的请求总数,这可以用来参考指定cache的大小。
//myEnv.getMutableConfig();//得到当前的环境配置信息
}catch(DatabaseException dbe){}
}
/**
* 打开database,以及相关操作
*
*/
public void eg3(){
Environment myDbEnvironment = null;
Database myDatabase = null;
try {
// Open the environment. Create it if it does not already exist.
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
myDbEnvironment = new Environment(new File("/export/dbEnv"), envConfig); //也可能用DatabaseConfig参数来打开,这样就可以设置数据库的属性,比如是否允许在库不存在时创建它,是否只读打开,是否支持事务等。
// Open the database. Create it if it does not already exist.
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
//transaction为null,不支持事务
myDatabase = myDbEnvironment.openDatabase(null,"sampleDatabase",dbConfig); //打开库,要提供一个数据库名字作为参数
} catch (DatabaseException dbe) {
// Exception handling goes here
}
//记录
String aKey = "key";
String aData = "data";
try {
DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));//最好指定编码方式,因为不指定编码会用系统的默认编码来转换,因为系统的默认编码可能会被人更改。
DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8"));
byte[] myKey = theKey.getData();
byte[] myData = theData.getData();
//从byte数组转换为string的方法
String key = new String(myKey, "UTF-8");
String data = new String(myData, "UTF-8");
//get和put用在非重复的数据存储,读写库时,注意一个小区别,就是数据库,是否允许重复的记录存在,两个记录公用一个key,这就是重复的记录,我们把重复的记录成为重复集合。或者叫多重。
//游标用于重复数据存储put和get。
//数据记录在内部是用Btree按照特定排序来存储的。一般是用key来排序的,key相同的多重数据是按照data来排序。
//记录Using Database Records
//记录是由key和data组成,即所熟悉的key->value,二者都被是有DatabaseEntry封装的。
//这个之前也提过很多次了,DatabaseEntry可以封装原始类型和复杂的对象类型,二者都要被转换为byte array存储,转换可以使用Bind API来完成
//写数据
myDatabase.put(null, theKey, theData);//如果不是可重复数据库,put将会覆盖原有的记录。
//myDatabase.putNoOverwrite(null, theKey, theData);//不允许覆盖,不管是否允许数据重复。
//读数据
//--myDatabase.getSearchBoth(null, theKey, theData, LockMode.DEFAULT);//查找key和data都匹配的记录
//--查询出来的key和data都是byte数组形式。
if (myDatabase.get(null, theKey, theData, LockMode.DEFAULT) ==OperationStatus.SUCCESS)
{
byte[] retData = theData.getData();
String foundData = new String(retData, "UTF-8");
System.out.println("For key: '" + aKey + "' found data: '" +foundData + "'.");
}
//删除数据
myDatabase.delete(null, theKey); //删除数据
} catch (Exception e) {}
//关闭数据库
//如果打开了游标,关闭时JE会发出警告,让你关闭他们先。活动状态的游标在关闭库的过程中会产生意想不到的结果,尤其是其他线程在写库的过程中。确定所有的访问都结束后再关闭库
try {
if (myDatabase != null) {
myDatabase.close();
myDbEnvironment.renameDatabase(null, "sampleDatabase", "test");//重命名,必须先关闭数据库
myDbEnvironment.removeDatabase(null, "sampleDatabase");//删除数据库,必须先关闭数据库
//myDbEnvironment.truncateDatabase(null, myDatabase.getDatabaseName(),true);//删除并回收数据库空间 ,true返回删除的记录的数量,false不返回删除的记录数量值
}
if (myDbEnvironment != null) {
myDbEnvironment.close();
}
} catch (DatabaseException dbe) {
分享到:
相关推荐
**Berkeley DB Java Edition**,简称BDBJE,是由Oracle公司开发的一款高度可移植的、基于文件系统的数据存储解决方案,特别适用于需要高效、可靠且无服务器的数据管理的应用场景。这款数据库系统采用B+树作为其核心...
**Berkeley DB Java Edition 5.0.73** Berkeley DB Java Edition(简称BDB JE)是一款由Oracle公司开发的高性能、轻量级的NoSQL数据库系统。它以其高效能、可扩展性和可靠性在处理大规模数据存储时受到广泛欢迎,...
### Berkeley DB Java Edition 使用手册详解 #### 一、Berkeley DB Java Edition (JE) 概述 Berkeley DB Java Edition (简称 JE) 是一款高性能、轻量级的NoSQL数据库解决方案,完全基于Java语言开发。它特别适用于...
《Berkeley DB Java Edition 4.0.92 开发包详解》 Berkeley DB Java Edition(简称BDB JE)是Oracle公司推出的一款强大的、高度可定制的嵌入式数据库系统,尤其适用于Java应用程序。这款数据库引擎以其轻量级、高...
这可能是BerkeleyDB Java Edition的jar文件,表示BerkeleyDB Java版的7.5.11版本。这个文件通常会包含以下组件: 1. **BerkeleyDB引擎**:这是数据库的核心部分,处理数据的读写操作,包括事务处理、并发控制、恢复...
这个版本可能包括API文档、示例代码、构建脚本等,帮助开发者理解和使用Berkeley DB的Java API。通过将这些库添加到Java项目中,开发者可以直接操作数据库,执行诸如读写、事务处理、并发控制等任务。 2. **Readme-...
总的来说,Berkeley DB Java Edition为Java开发者提供了一种快速、可靠且灵活的本地数据存储解决方案。通过上述步骤,我们可以创建并管理Berkeley DB数据库,实现数据的存取。然而,为了充分利用其功能,还需要深入...
通过上述知识点的详细介绍,我们可以了解到 Berkeley DB Java Edition 的基本使用流程及其实现细节。Berkeley DB 作为一款强大的嵌入式数据库,其高效、灵活的特点使其成为许多应用领域的首选数据库解决方案之一。...
在这个“berkeley db je-6.4.9.gz”压缩包中,包含了BDB Java Edition(JE)的6.4.9版本。这个版本的发布可能包含了性能优化、新功能、bug修复以及对先前版本的改进。下面将详细探讨BDB JE的相关知识点。 1. **键值...
2. "sun-javadb-docs-10.6.2-1.1.i386.rpm":这是Sun Java Database(以前称为Berkeley DB Java Edition)的文档包,版本10.6.2,它提供了关系数据库引擎,可以嵌入到Java应用程序中。 3. "sun-javadb-core-10.6.2-...
10. **嵌入式数据库**:SQLite和Berkeley DB等轻量级数据库常与Java嵌入式开发结合,用于存储和检索数据。 11. **硬件访问**:通过Java本地接口(JNI)或特定的硬件抽象层(HAL),开发者可以编写Java代码来控制...
此外,Ehcache还支持Berkeley DB Java Edition作为持久化存储引擎,进一步增强了数据的可靠性和完整性。 4. **分布式缓存支持**:通过集成Terracotta或Hazelcast等分布式缓存解决方案,Ehcache能够实现跨服务器的...
JE Space利用Oracle Berkeley DB Java Edition提供高性能的数据存储能力。 #### Space Interceptor Space Interceptor用于拦截Space的操作,可以添加额外的功能。 #### Space Tap Space Tap类似于日志记录,用于...