BDB數據庫操作工具類 CRUD整合

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章