三、一个简单的BDB JE例子

package test;

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;
import com.sleepycat.je.OperationStatus;

public class MyBerkeleyDB {
 private Environment env;
 public Environment getEnv() {
  return env;
 }

 private Database db;

 public MyBerkeleyDB() {
 }

 /**
  * 构建数据库的开发环境
  *
  * @param path   数据库开发环境的目录
  * @param cacheSize  配置缓存大小
  */
 public void setUp(String path, long cacheSize) {
  EnvironmentConfig envConfig = new EnvironmentConfig();
  //当设置为true时,说明若没有数据库的环境时,可以打开。否则就不能打开
  envConfig.setAllowCreate(true);
  //envConfig.setReadOnly(true);
  envConfig.setCacheSize(cacheSize);
  //设置事务
  //envConfig.setTransactional(true);
  //当提交事务的时候是否把缓存中的内容同步到磁盘中去。true 表示不同步,也就是说不写磁盘
  //envConfig.setTxnNoSync(true);
  //当提交事务的时候,是否把缓冲的log写到磁盘上,true 表示不同步,也就是说不写磁盘
  //envConfig.setTxnWriteNoSync(true);
  try {
   env = new Environment(new File(path), envConfig);
  } catch (DatabaseException e) {
   e.printStackTrace();
  }
 }

 /**
  * 构建数据库
  *
  * @param dbName 数据库的名称
  */
 public void open(String dbName) {
  DatabaseConfig dbConfig = new DatabaseConfig();
  //设置数据的是否可以创建的属性
  dbConfig.setAllowCreate(true);
  try {
   db = env.openDatabase(null, dbName, dbConfig);
  } catch (DatabaseException e) {
   e.printStackTrace();
  }
 }

 /**
  * 关闭berkeley db
  */
 public void close() {
  try {
   if (db != null) {
    db.close();
   }
   if (env != null) {
    env.cleanLog();
    env.close();
   }
  } catch (DatabaseException e) {
   e.printStackTrace();
  }
 }

 /**
  * 通过key得到数据
  * @param key   berkeley db中的key
  * @return
  * @throws Exception
  */
 public String get(String key) throws Exception {
  DatabaseEntry queryKey = new DatabaseEntry();
  DatabaseEntry value = new DatabaseEntry();
  queryKey.setData(key.getBytes("UTF-8"));
  OperationStatus status = db
    .get(null, queryKey, value, LockMode.DEFAULT);
  if (status == OperationStatus.SUCCESS) {
   return new String(value.getData(),"utf-8");
  }
  return null;
 }

 /**
  * 向berkeley db中存入数据
  * @param key  存入berkeley db时的键
  * @param value  存入berkeley db时的值
  * @return
  * @throws Exception
  */
 public boolean put(String key, String value) throws Exception {
  byte[] theKey = key.getBytes("UTF-8");
  byte[] theValue = value.getBytes("UTF-8");
  /**
   * Berkeley DB中的记录包括两个字段,就是键和值,
   * 并且这些键和值都必须是com.sleepycat.je.DatabaseEntry类的实例。
   */
  OperationStatus status = db.put(null, new DatabaseEntry(theKey),
    new DatabaseEntry(theValue));
  if (status == OperationStatus.SUCCESS) {
   return true;
  }
  return false;
 }
 /**
  * 通过
  * @param key
  * @return
  * @throws Exception
  */
 public boolean del(String key) throws Exception{
  DatabaseEntry queryKey = new DatabaseEntry();
  queryKey.setData(key.getBytes("UTF-8"));
  OperationStatus status=db.delete(null, queryKey);
  if(status==OperationStatus.SUCCESS){
   return true;
  }
  return false;
 }
 public static void main(String[] args) {
  MyBerkeleyDB mbdb = new MyBerkeleyDB();
  //必须先在你的C盘中创建文件夹bdb
  mbdb.setUp("C://bdb", 1000000);
  mbdb.open("myDB");
  try {
   System.out.println(mbdb.getEnv().getConfig());
  } catch (DatabaseException e) {
   e.printStackTrace();
  }
  System.out.println("开始向Berkeley db 中输入数据...");
  for (int i = 0; i < 20; i++) {
   try {
    String key = "myKey" + i;
    String value = "myValue" + i;
    //System.out.println("[" + key + ":" + value + "]");
    mbdb.put(key, value);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  try {
   System.out.println(mbdb.get("myKey2"));
  } catch (Exception e) {
   e.printStackTrace();
  }
  try {
   if(mbdb.del("myKey2")){
    System.out.println("ture");
   }else{
    System.out.println("false");
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
   mbdb.close();

 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值