Berkeley DB 开源的文件数据库
开源的文件数据库,介于关系数据库和内存数据库之间,按键值对方式存储

光说概念可能有点抽象,咱们直接来看一个具体的例子。下面的代码片段是我从网上找到并经过本地验证的,能帮你快速理解它的基本操作。
package org;
import ja va.io.File;
import ja va.io.UnsupportedEncodingException;
import ja va.util.concurrent.TimeUnit;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
import com.sleepycat.je.Transaction;
import com.sleepycat.je.TransactionConfig;
public class BerkeleyDB {
private Environment environment = null;//数据库环境
private DatabaseConfig dbConfig = null;//数据库配置
private Database database = null;//数据库对象
private String fileName = "D:\\wzx";
private String dbName = "wzx";
public void openDatabase(){
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
envConfig.setTransactional(true);
envConfig.setReadOnly(false);
envConfig.setTxnTimeout(10000, TimeUnit.MILLISECONDS);
envConfig.setLockTimeout(10000, TimeUnit.MILLISECONDS);
File file = new File(fileName);
if(!file.exists()){
file.mkdirs();
}
environment = new Environment(file, envConfig);
dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
dbConfig.setTransactional(true);
dbConfig.setReadOnly(false);
if(database == null)
database = environment.openDatabase(null, dbName, dbConfig);
}
public boolean insert(String key, String value, boolean isOverWrite){
try {
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry(value.getBytes("UTF-8"));
OperationStatus os = null;
Transaction transaction = null;
TransactionConfig txnConfig = new TransactionConfig();
txnConfig.setSerializableIsolation(true);
transaction = environment.beginTransaction(null, txnConfig);
if(isOverWrite){
os = database.put(transaction, theKey, theData);
}else{
os = database.putNoOverwrite(transaction, theKey, theData);
}
transaction.commit();
if(os == OperationStatus.SUCCESS){
return true;
}else{
return false;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return false;
}
public String query(String key){
try {
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry();
Transaction transaction = null;
TransactionConfig txnConfig = new TransactionConfig();
txnConfig.setSerializableIsolation(true);
transaction = environment.beginTransaction(null, txnConfig);
OperationStatus os = database.get(transaction, theKey, theData, LockMode.DEFAULT);
transaction.commit();
if(os == OperationStatus.SUCCESS){
String value = new String(theData.getData(), "UTF-8");
return value;
}else{
return "";
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void close(){
if(database != null){
database.close();
}
if(environment != null){
environment.cleanLog();
environment.close();
}
}
public static void main(String[] args) {
BerkeleyDB berkeleyDb = new BerkeleyDB();
berkeleyDb.openDatabase();
/*berkeleyDb.insert("China", "北京", true);
berkeleyDb.insert("US", "纽约", true);*/
System.out.println(berkeleyDb.query("China"));
}
}
相关攻略
Cursor vs IDEA:AI原生IDE的碘伏之战,Ja va程序员该如何选择? 2026年,AI编程工具的战场硝烟弥漫。Cursor凭借其AI原生的设计理念横空出世,而传统巨头JetBrains也宣布与Cursor达成深度集成(ACP协议)。面对这场变革,Ja va开发者是应该拥抱新锐的Cur
在AI驱动的RAG系统开发与后端面试中,文档切分策略是衡量工程深度的关键指标。简单回答“按固定字符数截取”往往暴露了项目经验的不足。业务场景中RAG的召回效果,数据预处理的质量占据了决定性因素。切片(Chunking)策略的优劣,直接为整个系统的召回能力设定了天花板。后续无论采用多么先进的大模型或精
必须安装JDK并配置JA VA_HOME与Path环境变量;先下载JDK 17 21 LTS版本,安装时取消“Add to PATH”,再手动设置JA VA_HOME指向安装目录,并在Path中添加%JA VA_HOME% bin,最后用ja va -version等命令验证。 在Windows 1
彻底解决“ja va不是内部或外部命令”问题,关键在于正确安装JDK并精准配置JA VA_HOME与Path环境变量。本文提供两种主流方案:推荐使用MSI安装包配合手动配置,或选择ZIP解压版进行全手动设置。同时涵盖多版本JDK管理技巧,并明确说明现代开发无需配置CLASSPATH。最后通过版本检查
在深入探讨了ScheduledThreadPoolExecutor的定时任务执行机制后,我们已经掌握了多线程任务的“启动”与“运行”环节。然而,一个健壮的并发系统,其“终止”环节同样至关重要。许多开发者专注于如何高效启动线程,却对如何让其安全、优雅地停止感到困惑。不当的线程终止方式,如粗暴中断或错误
热门专题
热门推荐
随着人工智能大模型与机器视觉技术的深度融合与产业升级,一个根本性的挑战愈发关键:底层视觉数据基础设施的能效水平,直接决定了上层AI应用的成本边界与识别精度的上限。近期,Robo ai (NASDAQ: AIIO) 旗下专注于AI基础设施的Neurovia AI,在第九届国际安全与国家风险防范展(IS
数字货币成功变现需掌握关键技巧:理解市场动态与主流币种联动,选择安全高流动性平台,制定明确风险目标和交易策略,严格执行止损与分散投资。市场持续变化,保持学习与适应能力是长期稳健交易的基础。
618购物节是电竞玩家升级装备的良机。华硕TUFGaming系列的战杀27与小金刚显示器凭借FastIPS面板、高刷新率、精准色彩及丰富电竞功能,以高性价比满足不同玩家对帧率与画质的追求,成为热门选择。
移动端二战空战游戏以机械浪漫与硬核操作吸引玩家。多款作品各具特色:或精细还原战机与基地经营,或重现太平洋战场任务,或融合弹幕射击与昼夜战术,或侧重战机收集养成,或提供割草式爽快体验。它们以历史氛围带玩家重返决定历史的天空。
《和平精英》中,“安V收车币”作为一种新兴交易方式,为玩家获取稀有车辆皮肤提供了安全便捷的渠道。它满足了玩家个性化需求,提升了游戏体验与沉浸感。参与交易需选择正规平台,合理规划消费并遵守官方规定,以保障自身权益。这一模式活跃了游戏经济,丰富了玩家的资源选择。





