BDB介紹
開源-kv數據庫
文件數據庫
嵌入式數據庫
提供多編程語言調用的各個版本,數據具備完全可移值性
提供一系列函數訪問數據庫,對SQL早期不支持,現在支持的有限
無網絡通信模塊
開發公司:Sleepycat Software->Oracle
maven依賴添加
<!-- 加入java bdb 3.3.75/6.4依賴 -->
<dependency>
<groupId>com.sleepycat</groupId>
<artifactId>je</artifactId>
<version>3.3.75</version>
</dependency>
<!-- 專業下載bdb依賴添加的倉庫源 -->
<repository>
<id>oracleReleases</id>
<name>Oracle Released Java Packages</name>
<url>http://download.oracle.com/maven</url>
<layout>default</layout>
</repository>
BDB掌握之API應用
步驟拆解:
數據庫環境變量配置
數據庫CRUD操作
數據庫關閉
數據庫環境變量配置
代碼實現
import java.io.File;
import java.io.UnsupportedEncodingException;
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;
// 環境變量的聲明
private Environment myDbEnvironment = null;
// 數據庫操作的對象聲明
private Database weiboDatabase = null;
/**
* bdb操作環境變量和數據庫初始化
*
* @param dbEnvFilePath
* @param databaseName
*/
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();
}
}
/**
* 將指定的kv存放到bdb當中,並可以選擇是否實時同步到磁盤中
*
* @param key
* @param value
* @param isSync
* @return
*/
public boolean put(String key, String value, boolean isSync) {
// 數據的key
// 數據的value
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();
}
// 對該庫進行count操作,查看有多少條數據
System.out.println(weiboDatabase.count());
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
// 刪除bdb中指定的key值
public boolean delete(String key) {
DatabaseEntry theKey;
try {
theKey = new DatabaseEntry(key.getBytes("UTF-8"));
weiboDatabase.delete(null, theKey);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 讀取bdb的key對應的數據
*
* @param key
* @return
*/
public String getValue(String key) {
// 要讀取數據的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(theData.getData(), "utf-8");
// 打印之
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 同步數據到磁盤當中,相當於讓數據實時持久化
*
* @return
*/
public boolean sync() {
if (myDbEnvironment != null) {
try {
myDbEnvironment.sync();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
return false;
}
/**
* 關閉環境變量數據庫
*
* @return
*/
public boolean close() {
try {
if (weiboDatabase != null) {
weiboDatabase.close();
}
if (myDbEnvironment != null) {
myDbEnvironment.sync();
myDbEnvironment.cleanLog();
myDbEnvironment.close();
}
return true;
} catch (DatabaseException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
String dbEnvFilePath = "bdb2";
String databaseName = "weibo2";
String key ="self_key_1";
String value="工具類操作實例";
BDBOperatorUtil bdUtil=new BDBOperatorUtil(dbEnvFilePath, databaseName);
// bdUtil.put(key, value, false);
// bdUtil.sync();
System.out.println(bdUtil.getValue(key));
}
}