import java.io.File;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
/**
* 封装的bdb操作工具类
*/
public class BDBOperatorUtil {
private String dbEnvFilePath;
private String databaseName;
// 数据库操作的对象声明
Database weiboDatabase = null;
// 环境变量的声明
Environment myDbEnvironment = null;
public BDBOperatorUtil(String dbEnvFilePath, String databaseName) {
this.dbEnvFilePath = dbEnvFilePath;
this.databaseName = databaseName;
/**
* 初始化数据库参数
*/
try {
// 初始化数据存储根目录文件夹
File f = new File(dbEnvFilePath);
if (!f.exists()) {
f.mkdirs();
}
// 数据库配置变量初始化
DatabaseConfig dbConfig = new DatabaseConfig();// 打开数据库
dbConfig.setAllowCreate(true);
// 初始化环境配置变量,基于该变量去配置环境变量
EnvironmentConfig envConfig = new EnvironmentConfig();
// 当使用的数据库配置变量不存在的时候,就自动创建
envConfig.setAllowCreate(true);
// 正式初始化数据库的环境
myDbEnvironment = new Environment(f, envConfig);
// 打开一个数据库,如果不存在,则自动创建
weiboDatabase = myDbEnvironment.openDatabase(null, databaseName, dbConfig);
} catch (Exception e) {
e.printStackTrace();
}
}
public boolean put(String key, String value, boolean isSync) {
// 存储数据
try {
// 将key和value都封装到DatabaseEntry中
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry(value.getBytes("UTF-8"));
// 写入数据库
weiboDatabase.put(null, theKey, theData);
if (isSync) {
// 数据同步到磁盘
this.sync();
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
//删除bdb中key对应数据
public boolean delete(String key) {
try {
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
weiboDatabase.delete(null, theKey);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
//读取bdb中key对应的数据
public String getValue(String key) {
try {
// 将读取数据的key封装到DatabaseEntry中
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
// 将读取出来的值以二进制形式放到DatabaseEntry中
DatabaseEntry theData = new DatabaseEntry();
// 执行读取操作
weiboDatabase.get(null, theKey, theData, LockMode.DEFAULT);
if (theData.getData() == null) {
return null;
}
// 将二进制数据转化成字符串值
String result = new String(new String(theData.getData(), "utf-8"));
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 同步数据到碰盘当中,相当于让数据操作实时持久化
public boolean sync() {
if (myDbEnvironment != null) {
try {
myDbEnvironment.sync();
return true;
} catch (DatabaseException e) {
e.printStackTrace();
}
}
return false;
}
// 关闭环境变量和数据库
public boolean close() {
try {
// // 先关闭数据库
if (weiboDatabase != null) {
weiboDatabase.close();
}
// // 再关闭BDB系统环境变量
if (myDbEnvironment != null) {
myDbEnvironment.sync();
myDbEnvironment.cleanLog(); // 在关闭环境前清理下日志
myDbEnvironment.close();
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
String dbEnvFilePath = "bdb2";
String database ="weibo2";
String key="mykey";
String value = "工具类操作示例";
BDBOperatorUtil bdbutil = new BDBOperatorUtil(dbEnvFilePath,database);
bdbutil.put(key, value, false);
bdbutil.sync();
//bdbutil.delete(key);
System.out.println(bdbutil.getValue(key));
bdbutil.close();
}
}