BerkeleyDB 例子

本文介绍了一个使用Java实现的BerkeleyDB示例程序,包括数据库的创建、打开、关闭及增删改查等基本操作,并提供了MD5加密字符串的方法。

package test;

import java.io.File;
import java.security.MessageDigest;
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();
}
}
//get
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;
}
//put
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;
}
//delete
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;
}
//update
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;
}
//md5
public static String md5(String string)
{
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
'e', 'f' };
try {
byte[] bytes = string.getBytes();
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(bytes);
byte[] updateBytes = messageDigest.digest();
int len = updateBytes.length;
char myChar[] = new char[len * 2];
int k = 0;
for (int i = 0; i < len; i++) {
byte byte0 = updateBytes[i];
myChar[k++] = hexDigits[byte0 >>> 4 & 0x0f];
myChar[k++] = hexDigits[byte0 & 0x0f];
}
return new String(myChar);
} catch (Exception e) {
return null;
}
}

public static void main(String[] args) {
MyBerkeleyDB mbdb = new MyBerkeleyDB();
mbdb.setUp("C:/bdb", 1000000);
mbdb.open("myDB");
System.out.println("开始向Berkeley DB中存入数据…");
try {
//mbdb.put("xp", "I'm in shanghai");
//System.out.println(mbdb.get("xp"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i=0; i<10000; 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 介绍 Berkeley DB 是一种嵌入式的键值数据库库,提供了程序对于数据的存储和检索功能。这种类型的数据库不需要独立运行的服务进程,而是通过链接到应用程序的方式工作,在应用启动时初始化并随其一同结束。由于其实现简单高效的特点,广泛应用于各种软件项目中[^1]。 ### 安装过程概述 针对不同版本的 Berkeley DB,默认安装路径会有所不同。例如: - 对于较早版本如4.6版,默认会被放置在 `/usr/local/BerkeleyDB.4.6` 文件夹内; - 而更新一些的5.3版本则位于 `/usr/local/BerkeleyDB.5.3` 中; 当然,用户可以通过配置 `--prefix` 参数来自定义目标位置。比如执行命令 `# ../dist/configure --enable-cxx` 可以改变默认安装地点至 `/usr/local/berkeleydb` 并启用 C++ 支持选项[^3]。 #### 针对特定环境下的说明 (Ubuntu) 如果是在基于 Ubuntu 的环境中操作,则需要注意操作系统本身以及所选 Berkeley DB 版本之间的兼容性问题。例如,在 Ubuntu 16.04 LTS 上部署 Berkeley DB 18.1.25 版本时,应当确认两者间的依赖关系已被妥善处理。 ### 使用指南 要开始使用 Berkeley DB,首先要确保已经成功完成了上述提到的编译与安装流程。之后可以根据编程语言的不同选择合适的 API 进行开发。以下是 Python 下的一个简单例子展示如何打开现有数据库文件或创建新的实例: ```python import bsddb3 try: # 尝试打开现有的 btree 类型数据库 'example.db' db = bsddb3.btopen('example.db', 'c') # 向数据库添加条目 key = "key".encode() value = "value".encode() db[key] = value finally: if not db is None: db.close() # 关闭连接 ``` 此段代码展示了怎样利用 Python 绑定模块 `bsddb3` 来管理 BTree 结构的数据集。请注意实际应用场景可能涉及更复杂的逻辑设计和技术细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值