开源的文件数据库,介于关系数据库和内存数据库之间,按键值对方式存储
下面是一个实例,是网上抄的,然后自己本机运行的
package org;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.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"));
}
}