我在做一个项目,需要一个存储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);
}
}