当前位置: 首页
数据库
Berkeley DB 开源的文件数据库

Berkeley DB 开源的文件数据库

热心网友 时间: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。

同类文章
更多
Redis持久化文件存放路径修改_通过config set dir实现

Redis持久化文件存放路径修改_通过config set dir实现

Redis持久化文件存放路径修改:通过config set dir实现 Redis 的 CONFIG SET dir 命令是否真的能修改持久化文件路径? 答案很明确:不能直接生效,除非满足一系列严苛的前提条件。简单来说,Redis 的 dir 配置项在绝大多数情况下是一个只读的运行时参数。如果你尝试

时间:2026-04-29 14:31
Redis AOF rewrite和RDB持久化能同时进行吗_理解冲突机制

Redis AOF rewrite和RDB持久化能同时进行吗_理解冲突机制

Redis AOF重写与RDB持久化能同时进行吗?理解冲突机制 开门见山地说,答案是不能。这并非一个可以讨价还价的配置选项,而是Redis内核层面的一道“硬锁”。 Redis 同一时刻能同时执行 bgrewriteaof 和 bgsa ve 吗? 绝对不能。Redis内部有一套明确的互斥机制:当一个

时间:2026-04-29 14:31
SQL怎样计算每个分组的峰值数据_使用MAX函数配合GROUP BY

SQL怎样计算每个分组的峰值数据_使用MAX函数配合GROUP BY

SQL怎样计算每个分组的峰值数据_使用MAX函数配合GROUP BY 先说一个核心结论:MAX() 配合 GROUP BY 确实能找出每个分组的最大值,但它只返回那个聚合后的数值本身,不会带回原始行里的其他字段。想获取完整的峰值记录,得用 ROW_NUMBER() 这类窗口函数来实现“每组取Top-

时间:2026-04-29 14:30
mysql死锁检测机制对CPU影响大吗_在高并发场景下开关参数性能对比

mysql死锁检测机制对CPU影响大吗_在高并发场景下开关参数性能对比

死锁检测会显著消耗CPU,尤其在高并发热点行更新时 死锁检测本身就会吃 CPU,尤其在高并发热点行更新时 很多人误以为MySQL的死锁检测是“按需触发”的低开销操作,其实不然。真相是,在每一个INSERT、UPDATE或DELETE语句执行前,InnoDB引擎都会主动检查当前的事务等待图是否存在环路

时间:2026-04-29 14:30
MySQL报错Too many connections_优化长连接与连接复用机制

MySQL报错Too many connections_优化长连接与连接复用机制

MySQL报错Too many connections的直接原因 遇到“Too many connections”报错,很多人的第一反应是SQL太慢或者内存不足。其实,真正的“元凶”很直接:当前活跃的数据库连接数,已经超过了MySQL配置文件里设定的max_connections上限。一旦触及这个硬

时间:2026-04-29 14:30
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程