嵌入式數據庫在Java中的應用[1]
Berkeley DB每一個(gè)記錄都有一個(gè)鍵值和對應的數據值,而鍵值和數據必須是類(lèi)com.sleepycat.db.Dbt的對象或其子類(lèi)的對象。Dbt提供了一些方法可以將byte數組或Object對象保存到Dbt的對象中去。比如,Dbt類(lèi)中的set_data(byte[])或set_object(Object)方法。注意到目前Berkeley DB中的Java API命名方法并不符合Java的命名規范,比如set_data()方法應該命名為setData()方法。Berkeley DB許諾在下一個(gè)版本中會(huì )提供符合命名規范的Java API。
Berkeley DB對任何存入的數據都是直接原樣存儲到數據文件中去,無(wú)論其是二進(jìn)制數據還是ASCII或Unicode等編碼的文本。通??梢岳眠@一特性和Java串行化的概念方便的進(jìn)行數據的存取。例如聲明一個(gè)類(lèi)
public class AccountInfo implements Serializable{
//帳戶(hù)信息
public String loginName;
public String password;
public boolean auotLogin;
}
在這個(gè)AccountInfo類(lèi)中僅僅包含了數據項的定義。我們完全可以將這個(gè)類(lèi)看作數據庫的表中字段定義??梢杂肂erkeley DB保存AccountInfo對象的串行化二進(jìn)制數據,以此來(lái)保存這個(gè)對象中的變量值。在操作中,先對Dbt的對象調用set_object(AccountInfo)方法,而后把這個(gè)Dbt對象作為一條紀錄保存到表中。當然,我們也可以應用繼承Dbt類(lèi)的方法來(lái)完成對數據的保存。
下面這段簡(jiǎn)單代碼演示如何將數據存入到數據庫中,然后再用游標對象瀏覽全部數據。
//注意,下面的程序的忽略了對異常處理,寫(xiě)入數據初始化等等一些代碼,請在適當修改后再編
//譯運行它
Db dbFile = null;
//生成Db對象
dbFile = new Db(null, 0);
//用BTree方式打開(kāi)數據庫,庫文件是在c:/temp下的mydata.db文件,表名是employee
//如果數據庫不存在,則自動(dòng)生成一個(gè)新的數據庫。
dbFile.open(null,c:tempmydata.db,employee,Db.DB_BTREE,
Db.DB_CREATE,0);
Dbt key = new Dbt();
Dbt data = new Dbt();
//向庫文件中插入一條數據,如果已經(jīng)存在,打印出錯信息
if (dbFile.put(null,key, data, Db.DB_APPEND) == Db.DB_KEYEXIST) {
System.out.println(Key already exists.);
}
//關(guān)閉數據文件
dbFile.close(0);
//重新打開(kāi)數據文件
dbFile = new Db(null, 0);
dbFile.open(null, c:tempmydata.db, employee, Db.DB_UNKNOWN, 0, 0644);
// 聲明一個(gè)數據庫游標Dbc對象iterator
Dbc iterator = dbFile.cursor(null, 0);
// 遍歷整個(gè)表
Dbt key = new Dbt();
while (iterator.get(key, data, Db.DB_NEXT) == 0)
{
System.out.println(reading);
}
評論