JAVA之BerkleyDB

本文介绍了一个使用 Berkeley DB 的 Java 示例程序,演示了如何设置环境、打开数据库、进行基本的 CRUD 操作,并提供了完整的代码样例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.eyesmore.bdb.je;  
  
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;  
    private Database db;  
  
    public MyBerkeleyDB() {  
  
    }  
  
    /** 构建Environment: 指定存储的文件(一个Environment可以有多个数据库) */  
    public void setUp(String path, long cacheSize) {  
        EnvironmentConfig envConfig = new EnvironmentConfig();  
        envConfig.setAllowCreate(true);  
        envConfig.setCacheSize(cacheSize);//The memory available to the database system, in bytes.  
        File dir = new File(path);  
        if(!dir.exists()) {//如果指定的目录不存在,则自动创建  
            dir.mkdir();  
            System.out.println("创建目录:"+path);  
        }  
        try {  
            env = new Environment(dir, envConfig);  
        } catch (DatabaseException e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 构建Database: 指定数据库名字,如果指定名字的数据库不存在,则自动创建。*/  
    public void open(String dbName) {  
        DatabaseConfig dbConfig = new DatabaseConfig();  
        dbConfig.setAllowCreate(true);  
        try {  
            db = env.openDatabase(null, dbName, dbConfig);  
        } catch (DatabaseException e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 关闭数据库和环境 */  
    public void close() {  
        try {  
            if (db != null) {  
                db.close();  
            }  
            if (env != null) {  
                env.close();  
            }  
        } catch (DatabaseException e) {  
            e.printStackTrace();  
        }  
    }  
  
    /**数据操作:写  
     * BDB存储的数据是无格式的,都是二进制的数据,无论是KEY,还是VALUE。  
     * 如果我们要存取JAVA对象,需要程序员先序列化成二进制的。  
     * */  
    public boolean put(String key, String value) throws Exception {  
        byte[] theKey = key.getBytes("UTF-8");  
        byte[] theValue = value.getBytes("UTF-8");  
        OperationStatus status = db.put(null, new DatabaseEntry(theKey),  
                new DatabaseEntry(theValue));  
        if (status == OperationStatus.SUCCESS) {  
            return true;  
        }  
        return false;  
    }  
      
    /**数据操作:读 */  
    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());  
        }  
        return null;  
    }  
      
    /**数据操作:修改 (覆盖写就是修改)*/  
    public boolean update(String key, String value) throws Exception {  
           byte[] updateKey = key.getBytes("UTF-8");  
           byte[] updateValue = value.getBytes("UTF-8");  
  
           OperationStatus status = db.put(null, new DatabaseEntry(updateKey), new DatabaseEntry(updateValue));  
           if (status == OperationStatus.SUCCESS) {  
            return true;  
           }  
           return false;  
    }  
      
    /**数据操作:删除 */  
    public boolean delete(String key) throws Exception {  
           byte[] theKey = key.getBytes("UTF-8");  
           OperationStatus status = db.delete(null, new DatabaseEntry(theKey));  
           if(status == OperationStatus.SUCCESS) {  
            return true;  
           }  
           return false;  
    }  
  
  
    public static void main(String[] args) throws Exception {  
        MyBerkeleyDB mbdb = new MyBerkeleyDB();  
        mbdb.setUp("D:\\bdb"1000000);  
        mbdb.open("myDB");  
      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();  
          }  
      }  
        mbdb.put("liwei""20");  
        String value = mbdb.get("liwei");  
        System.out.println(value);  
        mbdb.close();  
    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值