Berkeley DB学习(一)

一、简介

定义:Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤。

1)开源的kv类型数据库
2)文件数据库:
优点:数据保存在单一文件中,部署以及发布简单,使用内嵌在应用程序中。
缺点:数据库打开时,文件会被加载到内存,因为数据库不宜过大。
3)嵌入式数据库,提供一系列API,调用简单。
DB库和应用程序可一起编译成为可执行程序
4)基于3,DB库和应用程序在同一个地址空间,所以DB库无网络通信模块。
5)基于3,不支持对SQL代码解码,可以直接访问数据。后期支持部分SQL
6)提供多编程语言调用的各个版本

二、产生背景:

开发目的:以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的 ndbm,GNU项目的gdbm)
开发者:Sleepycat公司,06年被Oracle 公司收购,Berkeley DB成为Oracle数据库家族的一员,Sleepycat原有开发者继续在Oracle开发Berkeley DB,Oracle继续原来的授权方式并且加大了对Berkeley DB的开发力度,继续提升了Berkeley DB在软件行业的声誉。Berkeley DB的当前最新发行版本是6.4.9。

三、使用:

(1)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>

(2)基本API应用:
数据库环境变量配置

/**
*初始化数据库参数
*/
//数据库所在的存储文件夹
String dbEnvFilePath="bdb";
//数据库名称
String database="weibo";
//环境变量的声明
Environment myDbEnvironment=null;
//数据库操作的对象声明
Database weiboDatabse=null;
try{
	//初始化数据存储根目录文件夹
	File f=new File(dbEnvFilePath);
	if(!f.exists()){
	   f.mkdirs;
	}
	//数据库配置变量初始化
	DatabaseConfig dbConfig=new DatabaseConfig();
	//打开数据库
	dbConfig.seteAllowCreate(true);
	//初始化环境变量配置,基于该变量去配置环境变量
	EnvironmentConfig envConfig=new EnvironmentConfig();
	//当使用的数据库配置变量不存在的时候,就自动创建
	envConfig.setAllowCreate(true);
	//正式初始化数据库的环境
	myDbEnvironment=new Environment(f,envConfig);
	//打开一个数据库,如果不存在,就自动创建你
	weiboDatabase=myDaEnvironment.openDatabase(null,database,dbConfig);	
}catch(Exception e){
	e.printStackTrace();
}

数据库CRUD操作-——创建create

weiboDatabase=myDbEnvironment.openDatbase(null,database,dbConfig);

数据库CRUD操作-——增加add

//存储数据
	//数据的key
	String akey="key1";
	//数据的value
	String aData="data";
	try{
	//将key和value都封装到DatabaseEntry中
	DatabaseEntry theKey=new DatabaseEntry(aKey.getBytes("UTF-8"));
	DatabaseEntry theData=new DatabaseEntry(aData.getBytes("UTF-8"));
	//写入数据库
	weiboDatabase.put(null,theKey,theData);
	//对该库进行count操作,查看有多少条数据
	System.out.println(weiboDatbase.count());
    }catch(Exception e){
		e.printStackTrace();
    }

数据库CRUD操作-——读取read

//读取数据
	//要读取数据的key
	aKey="key1";
	try{
	//将读取数据的key封装到DatabaseEntry中
	DatabaseEntry theKey=new DatabaseEntry(aKey.getBytes("UTF-8"));
	DatabaseEntry theData=new DatabaseEntry();
	//执行读取操作
	weiboDatabase.get(null,theKsy,theData,LockMode.DEFAULT);
	//将二进制数据转换为字符串值
	String result=new String(theData.getData(),"UTF-8");
	//打印
	System.out.println(result);
	}catch(Exception e){
		e.printStackTrace();
    }

数据库CRUD操作-——删除Delete

//删除数据
	//要删除的数据key
	aKey="key1";
	try{
	//将要删除数据的key封装到DatabaseEntry中
	DatabaseEntry theKey=new DatabaseEntry(aKey.getBytes("UTF-8"));
	 //执行删除操作          
	 weiboDatabase.delete(null, theKey);          
	 //查看数据库当前的记录数         
	  System.out.println(weiboDatabase.count());
    }catch (Exception e) {          
		e.printStackTrace();
     }

关闭数据库

// 关闭
       try {         
        //先关闭数据库          
        if (weiboDatabase != null) {             
        weiboDatabase.close();          
        }          
        //再关闭BDB系统环境变量         
         if (myDbEnvironment != null) {                               
          myDbEnvironment.sync();             
          myDbEnvironment.cleanLog(); 
          // 在关闭环境前清理下日志             
          myDbEnvironment.close();          
          }       
       } catch (Exception e) {          
       	e.printStackTrace();
       }

猜你喜欢

转载自blog.csdn.net/weixin_40235225/article/details/84994384