浅梦凉城 2020-07-23 21:02 采纳率: 0%
浏览 79

Berkeley DB Java Edition数据丢失

我在做一个项目,需要一个存储key-value的数据库,因为比较小型,所以使用Berkeley DB Java Edition数据库,但是现在发现这个数据库无法将数据存储到硬盘上,关闭项目第二次打开的时候数据就消失了,附上代码:

public class RecordDaoImpl{

    //环境配置的声明
    private EnvironmentConfig envConfig = null;

    //构造函数配置
    public RecordDaoImpl() {
            envConfig = new EnvironmentConfig();
                    envConfig.setTransactional(false);
                    envConfig.setAllowCreate(true);
                    //数据库文件夹检查
                    File file = new File(DB_PATH);
                    if (!file.exists()) {
                file.mkdir();
            }
                    logger.debug("BDB数据库初始化成功");
        }

    //创建数据库
    public Database createDatabase(String identify) {
            Environment environment = null;
            try {
                environment = new Environment(new File(DB_PATH), this.envConfig);
                logger.debug("Berkeley数据库打开成功");
            } catch (EnvironmentLockedException e) {
                logger.debug("数据库环境错误");
                e.printStackTrace();
            } catch (DatabaseException e) {
                logger.debug("数据库打开异常");
                e.printStackTrace();
            }
            DatabaseConfig databaseConfig = new DatabaseConfig();
            //自动创建
            databaseConfig.setAllowCreate(true);
            //不进行事务处理
            databaseConfig.setTransactional(false);
            //数据分类
            databaseConfig.setSortedDuplicates(true);
            Database database = null;
            try {
                database = environment.openDatabase(null,identify,databaseConfig);
            } catch (DatabaseException e) {
                logger.debug("打开数据库异常");
                return null;
            }
            return database;
        }

        //关闭数据库
        public void closeDatabase(Database database) {
        try {
            if (database != null) {
                Environment environment = database.getEnvironment();
                database.close();
                environment.cleanLog(); // 在关闭环境前清理下日志
                environment.close();
                logger.debug("关闭当前数据库,进行持久化");
            }
        } catch (DatabaseException dbe) {
            logger.error("BerkeleyDB数据库关闭异常,数据保存失败");
        }
    }

    //使用
    public void use(){
        Database database = createDatabase(identify);
        DatabaseEntry key = new DatabaseEntry("key".getBytes());
        DatabaseEntry value = new DatabaseEntry("value".getBytes());
        database.put(null, key, value);
        closeDatabase(database);
    }

}
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-07-31 08:50
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)