首页 游戏 软件 资讯 排行榜 专题
首页
数据库
Berkeley DB 开源的文件数据库

Berkeley DB 开源的文件数据库

热心网友
12
转载
2026-04-29

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

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"));
    }
}

来源:https://blog.csdn.net/jnaix/article/details/84536839
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

AI原生IDE对决Cursor与IDEA Java程序员选择指南
AI资讯
AI原生IDE对决Cursor与IDEA Java程序员选择指南

Cursor vs IDEA:AI原生IDE的碘伏之战,Ja va程序员该如何选择? 2026年,AI编程工具的战场硝烟弥漫。Cursor凭借其AI原生的设计理念横空出世,而传统巨头JetBrains也宣布与Cursor达成深度集成(ACP协议)。面对这场变革,Ja va开发者是应该拥抱新锐的Cur

热心网友
05.19
Java与LangChain4j实现RAG文档智能拆分提升检索质量
AI资讯
Java与LangChain4j实现RAG文档智能拆分提升检索质量

在AI驱动的RAG系统开发与后端面试中,文档切分策略是衡量工程深度的关键指标。简单回答“按固定字符数截取”往往暴露了项目经验的不足。业务场景中RAG的召回效果,数据预处理的质量占据了决定性因素。切片(Chunking)策略的优劣,直接为整个系统的召回能力设定了天花板。后续无论采用多么先进的大模型或精

热心网友
05.18
Win10系统安装Java环境详细步骤与JDK配置指南
系统平台
Win10系统安装Java环境详细步骤与JDK配置指南

必须安装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

热心网友
05.17
Win11安装Java环境详细教程:配置JDK与运行环境
系统平台
Win11安装Java环境详细教程:配置JDK与运行环境

彻底解决“ja va不是内部或外部命令”问题,关键在于正确安装JDK并精准配置JA VA_HOME与Path环境变量。本文提供两种主流方案:推荐使用MSI安装包配合手动配置,或选择ZIP解压版进行全手动设置。同时涵盖多版本JDK管理技巧,并明确说明现代开发无需配置CLASSPATH。最后通过版本检查

热心网友
05.16
Java线程中断机制源码详解 如何优雅停止线程避免死锁
业界动态
Java线程中断机制源码详解 如何优雅停止线程避免死锁

在深入探讨了ScheduledThreadPoolExecutor的定时任务执行机制后,我们已经掌握了多线程任务的“启动”与“运行”环节。然而,一个健壮的并发系统,其“终止”环节同样至关重要。许多开发者专注于如何高效启动线程,却对如何让其安全、优雅地停止感到困惑。不当的线程终止方式,如粗暴中断或错误

热心网友
05.16

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

NeuroStream视觉数据底座实测报告发布性能与应用解析
科技数码
NeuroStream视觉数据底座实测报告发布性能与应用解析

随着人工智能大模型与机器视觉技术的深度融合与产业升级,一个根本性的挑战愈发关键:底层视觉数据基础设施的能效水平,直接决定了上层AI应用的成本边界与识别精度的上限。近期,Robo ai (NASDAQ: AIIO) 旗下专注于AI基础设施的Neurovia AI,在第九届国际安全与国家风险防范展(IS

热心网友
05.27
安全出币技巧指南:掌握高效交易与资金保障的关键
web3.0
安全出币技巧指南:掌握高效交易与资金保障的关键

数字货币成功变现需掌握关键技巧:理解市场动态与主流币种联动,选择安全高流动性平台,制定明确风险目标和交易策略,严格执行止损与分散投资。市场持续变化,保持学习与适应能力是长期稳健交易的基础。

热心网友
05.27
华硕电竞显示器618选购指南 高性价比双子星推荐
科技数码
华硕电竞显示器618选购指南 高性价比双子星推荐

618购物节是电竞玩家升级装备的良机。华硕TUFGaming系列的战杀27与小金刚显示器凭借FastIPS面板、高刷新率、精准色彩及丰富电竞功能,以高性价比满足不同玩家对帧率与画质的追求,成为热门选择。

热心网友
05.27
2026年二战飞行游戏推荐:空战模拟与对战佳作盘点
游戏资讯
2026年二战飞行游戏推荐:空战模拟与对战佳作盘点

移动端二战空战游戏以机械浪漫与硬核操作吸引玩家。多款作品各具特色:或精细还原战机与基地经营,或重现太平洋战场任务,或融合弹幕射击与昼夜战术,或侧重战机收集养成,或提供割草式爽快体验。它们以历史氛围带玩家重返决定历史的天空。

热心网友
05.27
和平精英安V收车币如何革新游戏经济与玩家交易生态
web3.0
和平精英安V收车币如何革新游戏经济与玩家交易生态

《和平精英》中,“安V收车币”作为一种新兴交易方式,为玩家获取稀有车辆皮肤提供了安全便捷的渠道。它满足了玩家个性化需求,提升了游戏体验与沉浸感。参与交易需选择正规平台,合理规划消费并遵守官方规定,以保障自身权益。这一模式活跃了游戏经济,丰富了玩家的资源选择。

热心网友
05.27