- 浏览: 1183974 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (350)
- Ajax研究 (2)
- javascript (22)
- struts (15)
- hibernate (12)
- spring (8)
- 我的生活 (28)
- jsp (2)
- 我的随笔 (84)
- 脑筋急转弯 (1)
- struts2 (2)
- ibatis (1)
- groovy (1)
- json (4)
- flex (20)
- Html Css (5)
- lucene (11)
- solr研究 (2)
- nutch (25)
- ExtJs (3)
- linux (6)
- 正则表达式 (2)
- xml (1)
- jetty (0)
- 多线程 (1)
- hadoop (40)
- mapreduce (5)
- webservice (2)
- 云计算 (8)
- 创业计划 (1)
- android (8)
- jvm内存研究 (1)
- 新闻 (2)
- JPA (1)
- 搜索技术研究 (2)
- perl (1)
- awk (1)
- hive (7)
- jvm (1)
最新评论
-
pandaball:
支持一下,心如大海
做有气质的男人 -
recall992:
山东分公司的风格[color=brown]岁的法国电视[/co ...
solr是如何存储索引的 -
zhangsasa:
-services "services-config ...
flex中endpoint的作用是什么? -
来利强:
非常感谢
java使用json所需要的几个包 -
zhanglian520:
有参考价值。
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
关于Berkeley数据库的介绍,可以参考下面的文章:
http://www.eepw.com.cn/article/76954.htm
http://zh.wikipedia.org/w/index.php?title=Berkeley_DB&variant=zh-hans
使用Berkeley DB的一般步骤如下:
第一,创建数据库环境Environment
创建一个Environment环境,首先需要设置一个配置对象DatabaseConfig,用来配置一个数据库的环境,然后就可以创建Environment环境:
EnvironmentConfig envConfig = new EnvironmentConfig(); // 创建一个EnvironmentConfig配置对象
envConfig.setAllowCreate(true); // 允许创建一个数据库环境
envConfig.setCacheSize(1000000); // 设置数据库缓存大小
try {
Environment env = new Environment(new File("D:\\"),envConfig); // 使用一个指定路径和一个EnvironmentConfig配置对象创建Environment环境
} catch (DatabaseException e) {
e.printStackTrace();
}
第二,打开数据库Database
首先需要在一个已经存在的Environment环境下考虑打开一个数据库;
打开数据库之前,也要创建一个DatabaseConfig配置对象,用来配置一个Database;
使用Environment环境来打开数据库Database。
在上面步骤中创建了env的基础上,打开数据库具体实现如下:
DatabaseConfig dbConfig = new DatabaseConfig(); // 创建一个DatabaseConfig配置对象
dbConfig.setAllowCreate(true); // 允许创建数据库
try {
Database db = env.openDatabase(null, "MyBDB", dbConfig); // 打开数据库MyBDB
} catch (DatabaseException e) {
e.printStackTrace();
}
第三,操作数据库
Berkeley DB存储的是键值对形式的数据,其实类似于一个Map,无非是向数据库中添加key/value对,或者根据指定的key取出对应的value,这是最基础的。
还可以使用游标来遍历数据库中的记录。
第四,关闭数据库及其环境
关闭的顺序就是:先关闭数据库,然后关闭环境:
try {
if(db != null) {
db.close();
}
if(env != null) {
env.close();
}
} catch (DatabaseException e) {
e.printStackTrace();
}
Berkeley DB实例
下面做了一个例子,实现了MyBerkeleyDB类,用来演示如何使用一个Berkeley DB:
写入数据
package org.shirdrn.berkeleydb;
import java.io.File;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
public class MyBerkeleyDB {
private Environment env;
private Database db;
public MyBerkeleyDB() {
}
public void setUp(String path, long cacheSize) {
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
envConfig.setCacheSize(cacheSize);
try {
env = new Environment(new File(path),envConfig);
} catch (DatabaseException e) {
e.printStackTrace();
}
}
public void open(String dbName) {
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
try {
db = env.openDatabase(null, dbName, dbConfig);
} catch (DatabaseException e) {
e.printStackTrace();
}
}
public void close() {
try {
if(db != null) {
db.close();
}
if(env != null) {
env.close();
}
} catch (DatabaseException e) {
e.printStackTrace();
}
}
public String get(String key) throws Exception {
DatabaseEntry queryKey = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
queryKey.setData(key.getBytes("UTF-8"));
OperationStatus status = db.get(null, queryKey, value,
LockMode.DEFAULT);
if (status == OperationStatus.SUCCESS) {
return new String(value.getData());
}
return null;
}
public boolean put(String key, String value) throws Exception {
byte[] theKey = key.getBytes("UTF-8");
byte[] theValue = value.getBytes("UTF-8");
OperationStatus status = db.put(null, new DatabaseEntry(theKey),
new DatabaseEntry(theValue));
if(status == OperationStatus.SUCCESS) {
return true;
}
return false;
}
public static void main(String[] args) {
MyBerkeleyDB mbdb = new MyBerkeleyDB();
mbdb.setUp("C:\\bdb", 1000000);
mbdb.open("myDB");
System.out.println("开始向Berkeley DB中存入数据...");
for(int i=0; i<20; i++) {
try {
String key = "myKey"+i;
String value = "myValue"+i;
System.out.println("[" + key + ":" + value + "]");
mbdb.put(key , value);
} catch (Exception e) {
e.printStackTrace();
}
}
mbdb.close();
}
可以看到控制台上打印出:
开始向Berkeley DB中存入数据...
[myKey0:myValue0]
[myKey1:myValue1]
[myKey2:myValue2]
[myKey3:myValue3]
[myKey4:myValue4]
[myKey5:myValue5]
[myKey6:myValue6]
[myKey7:myValue7]
[myKey8:myValue8]
[myKey9:myValue9]
[myKey10:myValue10]
[myKey11:myValue11]
[myKey12:myValue12]
[myKey13:myValue13]
[myKey14:myValue14]
[myKey15:myValue15]
[myKey16:myValue16]
[myKey17:myValue17]
[myKey18:myValue18]
[myKey19:myValue19]
也就是,想数据库中插入了20个键值对。
读取数据
在此基础上,我们可以打开这个数据库,从其中取出想要的键值对,根据key来取出value,修改main方法:
public static void main(String[] args) {
MyBerkeleyDB mbdb = new MyBerkeleyDB();
mbdb.setUp("C:\\bdb", 1000000);
mbdb.open("myDB");
while(true) {
try {
for(int i=0; i<1000; i++) {
System.out.println("从Berkeley DB中取出数据...");
String k = "myKey" + 2*i;
String v = mbdb.get(k);
System.out.println("[" + k + ":" + v +"]");
Thread.sleep(3000);
if(i == 20) {
mbdb.close();
System.exit(0);
}
}
Thread.sleep(300000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
打印出结果如下所示:
从Berkeley DB中取出数据...
[myKey0:myValue0]
从Berkeley DB中取出数据...
[myKey2:myValue2]
从Berkeley DB中取出数据...
[myKey4:myValue4]
从Berkeley DB中取出数据...
[myKey6:myValue6]
从Berkeley DB中取出数据...
[myKey8:myValue8]
从Berkeley DB中取出数据...
[myKey10:myValue10]
从Berkeley DB中取出数据...
[myKey12:myValue12]
从Berkeley DB中取出数据...
[myKey14:myValue14]
从Berkeley DB中取出数据...
[myKey16:myValue16]
从Berkeley DB中取出数据...
[myKey18:myValue18]
从Berkeley DB中取出数据...
[myKey20:null]
从Berkeley DB中取出数据...
[myKey22:null]
从Berkeley DB中取出数据...
[myKey24:null]
可以看到,我们只存储了[myKey0:myValue0]到[myKey19:myValue19],而打印出结果[myKey20:null]对应的value都为null,说明不存在指定的key。
删除数据
在上面的类中增加如下成员方法:
public boolean delete(String key) throws Exception {
byte[] theKey = key.getBytes("UTF-8");
OperationStatus status = db.delete(null, new DatabaseEntry(theKey));
if(status == OperationStatus.SUCCESS) {
return true;
}
return false;
}
用来删除指定的key及其对应的额value。
修改主函数,测试:
public static void main(String[] args) {
MyBerkeleyDB mbdb = new MyBerkeleyDB();
mbdb.setUp("C:\\bdb", 1000000);
mbdb.open("myDB");
try {
mbdb.delete("myKey0"); // 删除myKey0及其对应的myValue0
} catch (Exception e1) {
e1.printStackTrace();
}
while(true) {
try {
for(int i=0; i<20; i++) {
System.out.println("从Berkeley DB中取出数据...");
String k = "myKey" + i;
String v = mbdb.get(k);
System.out.println("[" + k + ":" + v +"]");
Thread.sleep(3000);
}
mbdb.close();
System.exit(0);
Thread.sleep(300000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
从Berkeley DB中取出数据...
[myKey0:null]
从Berkeley DB中取出数据...
[myKey1:myValue1]
从Berkeley DB中取出数据...
[myKey2:myValue2]
从Berkeley DB中取出数据...
[myKey3:myValue3]
可以看到,myKey0对应的myValue0为null,已经从数据库中删除了,其实该键值对已经不存在于该数据库中了。
修改数据
其实,就是重新写入存在的一个key及其修改该key对应的value,如下所示:
public boolean update(String key, String value) throws Exception {
byte[] updateKey = key.getBytes("UTF-8");
byte[] updateValue = value.getBytes("UTF-8");
OperationStatus status = db.put(null, new DatabaseEntry(updateKey), new DatabaseEntry(updateValue));
if (status == OperationStatus.SUCCESS) {
return true;
}
return false;
}
测试主函数:
public static void main(String[] args) {
MyBerkeleyDB mbdb = new MyBerkeleyDB();
mbdb.setUp("C:\\bdb", 1000000);
mbdb.open("myDB");
try {
mbdb.update("myKey0", "yourValue"); // 修改数据
} catch (Exception e1) {
e1.printStackTrace();
}
while(true) {
try {
for(int i=0; i<20; i++) {
System.out.println("从Berkeley DB中取出数据...");
String k = "myKey" + i;
String v = mbdb.get(k);
System.out.println("[" + k + ":" + v +"]");
Thread.sleep(3000);
}
mbdb.close();
System.exit(0);
Thread.sleep(300000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果如下所示:
从Berkeley DB中取出数据...
[myKey0:yourValue]
在线Berkeley DB Java Edition API:
http://www.oracle.com/technology/documentation/berkeley-db/je/java/index.html
发表评论
-
认真阅读hadoop源码
2012-11-01 16:00 1782从新复习hadoop,认真阅读hadoop源码,有兴趣的朋友可 ... -
铁道部售票网站怎么啦?
2012-01-10 10:25 1880乐淘CTO李勇:库存同步是难点 我的判断,除了 ... -
eclipse启动报错jvm terminated. Exit code=1
2011-10-11 08:55 1225转载链接: http://wxmfly.itey ... -
ireport中获取当前时间
2011-08-28 11:53 5172一。 iReport 中获取系统当前时间 1,选择Tex ... -
ireport引java bean database
2011-08-27 10:38 1748今天帮一同事调试程序,他们的报表工具用的是ireport4.0 ... -
谈谈爬虫的设计
2011-08-07 22:27 2321网络蜘蛛现在开源的已 ... -
为了养家,只能这样!
2011-07-03 16:22 16还是一直在玩数据,hadoop平台(自己一手搭建),使用爬虫n ... -
陆续整理数据方面的资料
2011-05-07 08:58 635差不多有一个多月没写东西了,最近比较忙!还是研究数据一些东西。 ... -
挣钱养家
2011-04-14 22:19 1163如果各位有私活的话忙不过来,可以通过QQ(282215036) ... -
使用perl连接mysql数据库
2011-04-05 22:21 1440用Perl DBI连接MySQL数据库 Perl中一个最酷的 ... -
图像数字识别技术
2011-04-01 17:32 5942最近在研究图像数字识别技术,对于一些简单没有干扰的图片,可以读 ... -
100个可供选择的搜索引擎
2011-03-02 13:11 1511本文根据 readwriteweb ... -
对于处理问题的一点想法
2011-02-23 08:26 1123昨天快下班的时候,遇到一个建立索引的问题,因为快下班了,我没有 ... -
温故而知新
2011-02-20 16:44 1190又回过头来复习以前的知识了?在家里实在无聊!把之前学习过的东西 ... -
加钱也得买票回家过年
2011-01-25 08:44 984昨天从黄牛党手上拿了一张高价票。加了100.哎!这年头在外面忙 ... -
Eclipse3.6 Helios SVN插件–Subversive
2011-01-12 11:42 3655刚在Google Code上发布了一个Open Project ... -
博客有时候来不及更新,希望大家见谅!
2011-01-10 17:42 1012刚到新公司,可能开始忙了,博客有时候来不及更新,希望大家见谅! ... -
新公司入职第一天
2011-01-10 11:47 1330今天是我去新公司入职的第一天。感觉一切都是新的,从头开始!加油 ... -
java中各种算法的实现
2010-12-30 13:01 1164选择排序算法的JAVA实现 viewplainprin ... -
java基础知识复习
2010-12-30 13:00 1021学习Java一 配置环境变量 学习Java二 开发第一 ...
相关推荐
**Java嵌入式NoSQL数据库之Berkeley DB Java Edition** Berkeley DB Java Edition(简称BDB JE)是一种高性能、轻量级的嵌入式数据库系统,由Oracle公司开发,广泛应用于需要快速数据存储和检索的应用场景。它并非...
总的来说,Berkeley DB Java Edition是一款强大的、基于文件的Java数据库,利用B+树数据结构实现高效的数据存储和检索。它的特点是轻量级、可移植和高性能,适用于各种需要本地持久化数据存储的Java应用。
Berkeley DB Java Edition(简称BDB JE)是一款由Oracle公司开发的高性能、轻量级的NoSQL数据库系统。它以其高效能、可扩展性和可靠性在处理大规模数据存储时受到广泛欢迎,尤其是在Google这样的大型互联网公司中,...
Berkeley DB Java Edition (JE) 是一款开源的嵌入式数据库管理系统,由Sleepycat Software开发,现归Oracle公司所有。这款数据库系统以其键值(K/V)存储模型为特色,适用于需要高性能、可伸缩性及事务处理能力的应用...
《嵌入式Berkeley DB Java版与Derby技术研究》一文主要探讨了两种典型的嵌入式数据库技术——Berkeley DB Java Edition和Apache Derby。嵌入式数据库在资源有限的环境中,如嵌入式系统,因其体积小、功能齐全、可...
Berkeley DB Java Edition(简称BDB JE)是Oracle公司推出的一款强大的、高度可定制的嵌入式数据库系统,尤其适用于Java应用程序。这款数据库引擎以其轻量级、高性能和易用性在Java企业开发领域广受欢迎。本文将深入...
BerkeleyDB是一个开源的、基于键值对的嵌入式数据库系统,由Oracle公司提供。它为Java开发者提供了丰富的API,使得在Java应用程序中轻松集成数据存储成为可能。标题中的"BerkeleyDB_java_jar包"指的是适用于Java开发...
**正文** Berkeley DB(简称BDB)是由Oracle公司开发...总之,Berkeley DB的Java版本为开发者提供了一个强大而灵活的嵌入式数据库解决方案,通过深入学习和实践,可以充分利用其特性来构建高效、可靠的数据存储系统。
BerkeleyDB是一款由Oracle公司开发的开源、嵌入式数据库系统,特别适用于Java开发者。在Java-Edition-BerkeleyDB-3.1.0版本中,它提供了高效、可靠的数据存储解决方案,尤其适合于对性能有极高要求的嵌入式应用或...
Berkeley DB 是一款高效、轻量级的嵌入式数据库系统,特别适合于需要本地存储且对性能有高要求的应用程序。它支持多种编程语言,包括Java,这使得开发人员能够在Java应用程序中直接使用Berkeley DB进行数据管理。在...
Berkeley DB Java Edition (简称 BDB JE) 是专门为 Java 平台设计的版本,提供了一套完整的 Java API 来操作数据库。该版本具有以下特性: - **跨平台性**:能够在多种操作系统上运行。 - **高性能**:利用内存映射...
Berkeley DB JE(Java Edition)是Oracle公司提供的一款开源、嵌入式、基于Java的键值对数据库系统。它以其轻量级、高性能和高可用性而受到广泛的青睐,尤其适合于需要在内存中管理大量数据的应用场景。在版本7.0.6...
- **BerkeleyDB Java Edition**:针对Java环境进行了优化,最新版本3.3已发布。 - **BerkeleyDB XML**:原生XML数据库,支持通过XQuery访问存储在容器中的文档,并根据内容进行索引。最新版本2.4已发布。 **1.3 ...
Berkeley DB Java Edition (JE) 是一款由Oracle公司开发的全Java实现的轻量级数据库管理系统,特别适用于处理大量简单数据。其主要特点包括: 1. **高效性能**:JE能有效处理从1到100万条记录,性能瓶颈通常在于...
DBD (Berkeley DB) Java Edition,简称JE,是Oracle公司提供的一款开源、高性能、嵌入式、事务处理型数据库系统。它专为Java应用程序设计,提供了轻量级的数据存储和管理解决方案,尤其适合需要在内存中高效处理大量...
在这个“berkeley db je-6.4.9.gz”压缩包中,包含了BDB Java Edition(JE)的6.4.9版本。这个版本的发布可能包含了性能优化、新功能、bug修复以及对先前版本的改进。下面将详细探讨BDB JE的相关知识点。 1. **键值...
10. **嵌入式数据库**:SQLite和Berkeley DB等轻量级数据库常与Java嵌入式开发结合,用于存储和检索数据。 11. **硬件访问**:通过Java本地接口(JNI)或特定的硬件抽象层(HAL),开发者可以编写Java代码来控制...
2004年又推出了Berkeley DB Java Edition,这是Berkeley DB的纯Java版本。 - **技术特点**: - **高性能**:Berkeley DB以其出色的性能著称,能够快速处理大量数据。 - **可扩展性**:Berkeley DB支持高并发访问,...