Berkeley db java 代碼執行個體

來源:互聯網
上載者:User


(1)開啟Database環境 

EnvironmentConfig envCfg = new EnvironmentConfig();//當資料庫環境不存在的時候,建立一個資料庫環境,預設為false.envCfg.setAllowCreate(true);//以唯讀方式開啟,預設為false.envCfg.setReadOnly(false);//事務支援,預設為false.envCfg.setTransactional(true);Environment mydbEnv = new Environment(new File(envHome), envCfg);System.out.println("Env Config: " + mydbEnv.getConfig());

(2)開啟Database

DatabaseConfig dbCfg = new DatabaseConfig();dbCfg.setAllowCreate(true);dbCfg.setReadOnly(false);dbCfg.setTransactional(true);Database mytestdb = mydbEnv.openDatabase(null, "VendorDB", dbCfg);System.out.println("Database Name: " + mytestdb.getDatabaseName());

(3)簡單的CRUD 

//CString key = "key-rensanning";String value = "This is a test!(000)";DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8"));DatabaseEntry valEntry = new DatabaseEntry(value.getBytes("utf-8"));OperationStatus status = mytestdb.put(null, keyEntry, valEntry);System.out.println("Put Status: " + status);//RDatabaseEntry valGet = new DatabaseEntry();status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("Read Value:" + value);}//Uvalue = "This is a test!(111)";status = mytestdb.put(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8")));status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("Update Value:" + value);}//Dstatus = mytestdb.delete(null, keyEntry);System.out.println("Delete Status: " + status);


(4)不同的資料寫入方式 

String key = "key-rensanning";DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8"));DatabaseEntry valGet = new DatabaseEntry();String value = "This is a test!(by 'put' method)";//Database.put(): 向資料庫寫入資料,如果不支援重複記錄,則會覆蓋更新key對應的已有記錄OperationStatus status = mytestdb.put(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8")));status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("Put Value:" + value);}//Database.putNoOverwrite():向資料庫寫入資料,但是如果key已經存在,不會覆蓋已有資料(即使資料庫支援重複key)value = "This is a test!(by 'putNoOverwrite' method)";status = mytestdb.putNoOverwrite(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8")));status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("PutNoOverwrite Value:" + value);}//*****設定一個key是否允許儲存多個值*****DatabaseConfig dbCfg = new DatabaseConfig();dbCfg.setAllowCreate(true);dbCfg.setReadOnly(false);dbCfg.setTransactional(true);dbCfg.setSortedDuplicates(true);Database mytestdb2 = mytestdb.getEnvironment().openDatabase(null, "DuplicatesDB", dbCfg);//Database.putNoDupData():向資料庫寫入資料(該方法僅用於支援重複key的資料庫),如果key和value對應的記錄已經存在,那麼操作結果是:OperationStatus.KEYEXISTvalue = "This is a test!(by 'putNoDupData' method)";status = mytestdb2.putNoDupData(null, keyEntry, new DatabaseEntry(value.getBytes("utf-8")));if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("PutNoOverwrite Value:" + value);} else if (status == OperationStatus.KEYEXIST) {System.out.println("putNoDupData KEYEXIST:" + key);}status = mytestdb2.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("putNoDupData Value:" + value);}if (null != mytestdb2) {mytestdb2.close();mytestdb2 = null;}

(5)不同的資料讀取方式 

String key = "key-rensanning";String value = "This is a test!(000)";DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8"));DatabaseEntry valEntry = new DatabaseEntry(value.getBytes("utf-8"));OperationStatus status = mytestdb.put(null, keyEntry, valEntry);System.out.println("Put Status: " + status);DatabaseEntry valGet = new DatabaseEntry();//Database.get() :檢索key對應的記錄status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("Read Value(get):" + value);}//Database.getSearchBoth() :根據key和value 檢索資料庫記錄status = mytestdb.getSearchBoth(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = new String(valGet.getData(), "utf-8");System.out.println("Read Value(getSearchBoth):" + value);}

(6)對象的讀寫

//CString key = "key-rensanning-Object";Person value = new Person(9527, "rensanning", true);DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("utf-8"));DatabaseEntry valEntry = new DatabaseEntry();PersonTupleBinding personBinding = new PersonTupleBinding();personBinding.objectToEntry(value, valEntry);OperationStatus status = mytestdb.put(null, keyEntry, valEntry);System.out.println("Put Person Status: " + status);//RDatabaseEntry valGet = new DatabaseEntry();status = mytestdb.get(null, keyEntry, valGet, LockMode.DEFAULT);if (status == OperationStatus.SUCCESS) {value = personBinding.entryToObject(valGet);System.out.println("Read Person Value:" + value.getId() + "\t" + value.getName() + "\t" + value.isSex());}

class Person {int id;String name;boolean sex;public Person() {}public Person(int id, String name, boolean sex) {this.id = id;this.name = name;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}}
class PersonTupleBinding extends TupleBinding<Person> {@Overridepublic Person entryToObject(TupleInput input) {Person p = new Person();p.setId(input.readInt());p.setName(input.readString());p.setSex(input.readBoolean());return p;}@Overridepublic void objectToEntry(Person p, TupleOutput output) {output.writeInt(p.getId());output.writeString(p.getName());output.writeBoolean(p.isSex());}}

(7)直接持久層應用(DPL:Direct Persistence Layer) 
Environment env = mytestdb.getEnvironment();StoreConfig storeConfig = new StoreConfig();storeConfig.setAllowCreate(true);storeConfig.setTransactional(true);EntityStore store = new EntityStore(env, "StoreDB", storeConfig);PrimaryIndex<String, UserInfo> pIndex = store.getPrimaryIndex(String.class, UserInfo.class);//CpIndex.put(new UserInfo("001", "user001"));pIndex.put(new UserInfo("002", "user002"));pIndex.put(new UserInfo("003", "user003"));pIndex.put(new UserInfo("004", "user004"));pIndex.put(new UserInfo("005", "user005"));//RString myKey = "001";UserInfo getData = pIndex.get(myKey);System.out.println("Read User 001:" + getData);//UpIndex.put(new UserInfo("002", "user002222"));//Read ALLEntityCursor<UserInfo> cursor = pIndex.entities();try {Iterator<UserInfo> i = cursor.iterator();while (i.hasNext()) {System.out.println("Cursor data:" + i.next());}} finally {cursor.close();}//DString pkey = "003";boolean flag = pIndex.delete(pkey);System.out.println("delete object :" + pkey + " result:" + flag);//關閉storeif (store != null) {store.close();store = null;}
@Entity@SuppressWarnings("serial")class UserInfo implements Serializable {@PrimaryKeyprivate String userId;private String userName;public UserInfo() {}public UserInfo(String userId, String userName) {this.userId = userId;this.userName = userName;}public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}@Overridepublic String toString() {return "UserInfo [userId=" + userId + ", userName=" + userName + "]";}}


(9)遊標操作 

//Cfor(int i = 0; i < 5; i++) {mytestdb.put(null, new DatabaseEntry(("KEY"+(i+1)).getBytes("utf-8")), new DatabaseEntry(("VALUE"+(i+1)).getBytes("utf-8")));}DatabaseEntry key = new DatabaseEntry();DatabaseEntry value = new DatabaseEntry();//D (by Cursor)Transaction txn = mytestdb.getEnvironment().beginTransaction(null, null);Cursor cursor1 = mytestdb.openCursor(txn, null);OperationStatus result1 = cursor1.getFirst(key, value, null);while (result1 == OperationStatus.SUCCESS) {if ("VALUE3".equals(new String(value.getData(), "utf-8"))) {cursor1.delete();}result1 = cursor1.getNext(key, value, null);}if (cursor1 != null) {cursor1.close();}if (txn != null) {txn.commit();}//R (by Cursor)Cursor cursor2 = mytestdb.openCursor(null, null);OperationStatus result2 = cursor2.getFirst(key, value, null);while (result2 == OperationStatus.SUCCESS) {System.out.println("Cursor Read Value:" + new String(value.getData(), "utf-8"));result2 = cursor2.getNext(key, value, null);}if (cursor2 != null) {cursor2.close();}


http://rensanning.iteye.com/blog/1872481

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.