Berkeley DB 开源的文件数据库
开源的文件数据库,介于关系数据库和内存数据库之间,按键值对方式存储

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
光说概念可能有点抽象,咱们直接来看一个具体的例子。下面的代码片段是我从网上找到并经过本地验证的,能帮你快速理解它的基本操作。
package org;
import ja va.io.File;
import ja va.io.UnsupportedEncodingException;
import ja va.util.concurrent.TimeUnit;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
import com.sleepycat.je.Transaction;
import com.sleepycat.je.TransactionConfig;
public class BerkeleyDB {
private Environment environment = null;//数据库环境
private DatabaseConfig dbConfig = null;//数据库配置
private Database database = null;//数据库对象
private String fileName = "D:\\wzx";
private String dbName = "wzx";
public void openDatabase(){
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
envConfig.setTransactional(true);
envConfig.setReadOnly(false);
envConfig.setTxnTimeout(10000, TimeUnit.MILLISECONDS);
envConfig.setLockTimeout(10000, TimeUnit.MILLISECONDS);
File file = new File(fileName);
if(!file.exists()){
file.mkdirs();
}
environment = new Environment(file, envConfig);
dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
dbConfig.setTransactional(true);
dbConfig.setReadOnly(false);
if(database == null)
database = environment.openDatabase(null, dbName, dbConfig);
}
public boolean insert(String key, String value, boolean isOverWrite){
try {
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry(value.getBytes("UTF-8"));
OperationStatus os = null;
Transaction transaction = null;
TransactionConfig txnConfig = new TransactionConfig();
txnConfig.setSerializableIsolation(true);
transaction = environment.beginTransaction(null, txnConfig);
if(isOverWrite){
os = database.put(transaction, theKey, theData);
}else{
os = database.putNoOverwrite(transaction, theKey, theData);
}
transaction.commit();
if(os == OperationStatus.SUCCESS){
return true;
}else{
return false;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return false;
}
public String query(String key){
try {
DatabaseEntry theKey = new DatabaseEntry(key.getBytes("UTF-8"));
DatabaseEntry theData = new DatabaseEntry();
Transaction transaction = null;
TransactionConfig txnConfig = new TransactionConfig();
txnConfig.setSerializableIsolation(true);
transaction = environment.beginTransaction(null, txnConfig);
OperationStatus os = database.get(transaction, theKey, theData, LockMode.DEFAULT);
transaction.commit();
if(os == OperationStatus.SUCCESS){
String value = new String(theData.getData(), "UTF-8");
return value;
}else{
return "";
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void close(){
if(database != null){
database.close();
}
if(environment != null){
environment.cleanLog();
environment.close();
}
}
public static void main(String[] args) {
BerkeleyDB berkeleyDb = new BerkeleyDB();
berkeleyDb.openDatabase();
/*berkeleyDb.insert("China", "北京", true);
berkeleyDb.insert("US", "纽约", true);*/
System.out.println(berkeleyDb.query("China"));
}
}
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Redis持久化文件存放路径修改_通过config set dir实现
Redis持久化文件存放路径修改:通过config set dir实现 Redis 的 CONFIG SET dir 命令是否真的能修改持久化文件路径? 答案很明确:不能直接生效,除非满足一系列严苛的前提条件。简单来说,Redis 的 dir 配置项在绝大多数情况下是一个只读的运行时参数。如果你尝试
Redis AOF rewrite和RDB持久化能同时进行吗_理解冲突机制
Redis AOF重写与RDB持久化能同时进行吗?理解冲突机制 开门见山地说,答案是不能。这并非一个可以讨价还价的配置选项,而是Redis内核层面的一道“硬锁”。 Redis 同一时刻能同时执行 bgrewriteaof 和 bgsa ve 吗? 绝对不能。Redis内部有一套明确的互斥机制:当一个
SQL怎样计算每个分组的峰值数据_使用MAX函数配合GROUP BY
SQL怎样计算每个分组的峰值数据_使用MAX函数配合GROUP BY 先说一个核心结论:MAX() 配合 GROUP BY 确实能找出每个分组的最大值,但它只返回那个聚合后的数值本身,不会带回原始行里的其他字段。想获取完整的峰值记录,得用 ROW_NUMBER() 这类窗口函数来实现“每组取Top-
mysql死锁检测机制对CPU影响大吗_在高并发场景下开关参数性能对比
死锁检测会显著消耗CPU,尤其在高并发热点行更新时 死锁检测本身就会吃 CPU,尤其在高并发热点行更新时 很多人误以为MySQL的死锁检测是“按需触发”的低开销操作,其实不然。真相是,在每一个INSERT、UPDATE或DELETE语句执行前,InnoDB引擎都会主动检查当前的事务等待图是否存在环路
MySQL报错Too many connections_优化长连接与连接复用机制
MySQL报错Too many connections的直接原因 遇到“Too many connections”报错,很多人的第一反应是SQL太慢或者内存不足。其实,真正的“元凶”很直接:当前活跃的数据库连接数,已经超过了MySQL配置文件里设定的max_connections上限。一旦触及这个硬
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

