定义: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();
}