- 浏览: 88579 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
z694571598:
set 在哪?
js实现Set,Map,List,Queue -
coolboy09:
java并发编程实战上有类似的例子。我有一个疑惑,现在提出来和 ...
高速缓存实现 -
znlyj:
我同样关注,怎么更新缓存?另外,如果我不想将计算结果放到进程内 ...
高速缓存实现 -
Terry_zzz:
很好, 总结的很全面 谢谢!
深入浅出设计模式之单态模式(singleton) -
supertianyi:
好文,学习了
精通js中的Array
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) {
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) {
发表评论
-
Maven2 POM.xml 配置元素详解
2011-06-16 08:56 1421<!--可以免费转载,转载时请注明出处 http:// ... -
深入浅出URL编码
2010-12-24 09:35 948一、问题: 编码问题是JAVA初学者在web开 ... -
mysql自动关闭服务、连接限制等问题的解决方法
2010-11-22 09:36 3036通过mysql服务器端程序mysql Administrato ... -
高速缓存实现
2010-06-08 10:39 3995各位大虾,本人实现 ... -
Java开发中文件上传应用
2010-05-15 23:54 1163今天闲暇无所事事,很长时间没有写博客了,突然想起很多开发 ... -
Java ClassLoader 详解
2010-03-23 12:33 1102类加载器是 Java 语言的一个创新,也是 Java 语言流行 ... -
Java垃圾回收机制和性能调优
2010-01-29 12:40 8781.JVM的gc概述 g ... -
Java编码问题
2009-11-25 16:36 741乱码对于使用非英语文 ... -
JDK+Tomcat +eclipse+MyEclipse的配置
2009-11-16 14:48 1187说一下关于JDK+Tomcat +ecli ... -
Java图片水印处理
2009-10-30 13:28 1553import java.awt.AlphaComposite; ... -
Java正则表达式的解释说明
2009-10-28 18:18 713表达式意义: 1.字符 x ... -
Freemarker语法
2009-10-21 15:29 791常用语法 EG.一个对象BOOK 1.输出 $…{book.n ... -
Servlet的两种跳转区别
2009-10-19 13:46 1287在servlet中,一般跳转都 ... -
Berkeley DB使用说明
2009-10-14 18:32 1775关键字: berkeley db java edi ... -
Tomcat配置详解
2009-09-29 11:44 968第一步:下载j2sdk和tomcat 到sun官方站(htt ... -
URLConnection的连接、超时、关闭用法总结
2009-09-10 12:57 1797ava中可以使用HttpURLConnection来请求WEB ... -
时间操作工具类
2009-09-09 14:27 3213在项目开发工程中,使用了很多时间的操作,改工具类提供了很 ... -
Java操作图片改变大小加水印
2009-09-09 11:21 2070在实际的项目开发中,有可能遇到对图片的操作,比如加水印, ... -
操作抓取网络资源
2009-09-08 12:57 861在实际开发过程中,大家难免遇到抓取网络资源的操作,列如:抓 ... -
java中操作Excel
2009-09-08 12:49 1060在企业级开发中,经常遇到读写excel的操作,在此将一些 ...
相关推荐
BerkeleyDB 多库联合操作 (Secondary Databases) - **3.1 二级数据库介绍** - **概念解释**:二级数据库是对主数据库的一个索引,用于提高查询效率。 - **应用场景**:快速查找、数据统计等。 - **3.2 创建二级...
#### 四、Berkeley DB 实例代码解析 在提供的部分代码示例中,展示了如何通过 `MyBerkeleyDB` 类来使用 Berkeley DB。这里重点解析 `setUp` 方法,该方法用于初始化数据库环境。 ```java public void setUp(String...
在“BerkeleyDB概念”部分,文档会介绍Berkeley DB的基本概念,如BTree和Hash数据库的访问方式选择,以及Queue和Recno之间的选择。 接下来,教程会讨论数据库的限制与可移植性、环境设置、异常处理和错误返回。然后...
- **20.6 BerkeleyDB使用C++实例** - **更多示例**:提供更多的C++代码示例以加深理解。 - **20.7 BerkeleyDB中Btree、Queue、Recno记录编号的说明** - **数据结构解释**:详细解释Berkeley DB中使用的三种数据...
3. **BerkeleyDB-Core-C-GSG.pdf**:这是一本BerkeleyDB C的核心指南,适合初学者,通过实例介绍了如何构建和管理BerkeleyDB数据库,包括数据模型、数据库类型和查询方式等。 4. **BerkeleyDB-Java-Collections.pdf...
Berkeley DB 是一款高效、轻量级的嵌入式数据库系统,特别适合于需要本地存储且对性能有高要求的应用程序。它支持多种编程语言,包括Java,这使得开发人员能够在Java应用程序中直接使用Berkeley DB进行数据管理。在...
**Berkeley DB 知识详解** Berkeley DB(简称 BDB)是一...通过深入阅读提供的 "Berkeley DB 参考资料.pdf",你可以更全面地了解 Berkeley DB 的使用方法、API 实例以及最佳实践,进一步提升在实际项目中的应用能力。
Oracle Berkeley DB是一款高效、轻量级的嵌入式数据库系统,广泛应用于各种需要快速数据存储和检索的应用场景中。这款数据库管理系统(DBMS)由Oracle公司开发,它以源码形式提供,允许开发者在自己的软件中集成,...
8. **实例与实践**:资料中可能包含的实际案例和示例代码,可以帮助开发者更好地理解如何在具体项目中使用Berkeley DB。这些例子可能涵盖了数据插入、查询、更新、删除以及事务管理等常见操作。 总之,这个...
**Berkeley DB Java Edition 5.0.73** Berkeley DB Java Edition(简称BDB JE)是一款由Oracle公司开发的高性能、轻量级的NoSQL数据库系统。它以其高效能、可扩展性和可靠性在处理大规模数据存储时受到广泛欢迎,...
**Berkeley DB** 是一款轻量级的...总的来说,"db.rar"中的内容为开发者提供了一个学习和实践Berkeley DB在嵌入式系统中应用的实例,通过分析和运行这些示例,可以帮助深入理解和掌握Berkeley DB的使用技巧和最佳实践。
`BerkeleyDB` 模块是 Perl 社区为 Perl5 设计的一个接口,允许 Perl 程序员无缝地访问 Berkeley DB 数据库。 **Perl5-Module 和 XS** 在 Perl 中,模块(Module)是一种代码封装机制,可以将功能模块化,便于重用...
- **20.6 Berkeley DB 使用 C++ 实例** - **进一步演示**:扩展 C++ 示例,涵盖更多高级功能。 - **20.7 Berkeley DB 中 Btree、Queue、Recno 记录编号的说明** - **记录编号**:解释记录编号的原理和应用场景。 -...
根据提供的文档信息,“BerkeleyDB-Core-JAVA-GSG.pdf”主要介绍了如何在Java环境中使用Berkeley DB。该文档强调了Berkeley DB作为一种文件类型数据库的优势,包括快速的存取速度和方便的操作特性。 #### 二、...
- **BerkeleyDB-Core-C-GSG.pdf**:这可能是“Core C编程指南”,详细介绍了如何使用C语言接口来操作BDB数据库,包括基本操作、事务处理、多线程编程等方面的内容。 - **BDB_Prog_Reference.pdf**:可能是“BDB程序...
在“BerkeleyDB-Core-Cxx-GSG.rar”这个压缩包中,包含的文件是“BerkeleyDB-Core-Cxx-GSG.pdf”,这很可能是Berkeley DB的C++接口的官方指南或开发者指南(Guide for Getting Started)。这份文档将深入介绍如何在...
Berkeley DB Java Edition(JE)是一种为Java程序提供内嵌式、事务保护的数据库引擎,它继承了Berkeley DB家族的优点,包括快速、可靠和具备容错能力的数据管理特性。为了深入理解其数据存储结构,有必要对JE使用的B...