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