文章關鍵字:Java 嵌入式開發 DB data 通訊錄 address book 文本資料庫 微型 記錄 資料
(這些小程式依例丟在code.google上):http://code.google.com/p/greenvm/downloads/list
LMini是Loonframework分支項目之一,它是一個僅有55KB的純Java嵌入式文本資料庫,不支援SQL語句,完全以物件導向方式進行資料操作,在Loonframework主包中主要負責實現快取資料的硬碟持久化功能。但作為項目分支,LMini並非必須與Loonframework主包整合,也允許作為單獨的微型資料庫存在。
LMini的開發目的在於提供一種簡單快捷的本機資料持久化方式,如遊戲記錄、檔案快取、簡單的增、刪、改、查操作都可以通過LMini得以實現,它的優勢在於完全脫離java.sql包依賴,比db4o、sqllite體積更小,比Properties所提供的功能等多。
LMini通過MDB介面進行資料庫操作,而根據MDB介面所獲得的不同執行個體,操作模式又可分為如下三種,即:記憶體模式、單一檔案模式及多檔案模式。
記憶體模式:
執行個體化此模式後,將直接在記憶體開闢一塊地區進行資料庫類比操作,當程式關閉時記憶體資料庫也隨之消失,不能持久化儲存,調用方法為Engine.getMEMDB。
單一檔案模式:
執行個體化此模式後,資料庫將以檔案形式存在,程式會自動產生唯一的物理檔案於硬碟之上,所有操作也將基於此物理檔案進行,只要此檔案不被刪除資料將永久存在,調用方法為Engine.getMDBOnly。
多檔案模式:
執行個體化此模式後,資料庫將以檔案夾形式存在,程式會自動根據建立的表格產生多個物理檔案於此檔案夾中,所有操作將基於此檔案夾進行,只要此檔案夾及其中檔案不被破壞,資料將永久存在,調用方法為Engine.getMDBMany。
以上三種模式皆為介面實現,操作方法完全一致,僅在儲存方式上有所分別。
基本操作方式:
1、資料庫的建立與開啟:
當我們對MDB介面進行執行個體化,並調用begin方法後,LMini會自動監測指定位置是否已有文本資料庫存在,有則載入其檔案內容,沒有將自動建立一個空資料庫於指定位置。
LMini以一個begin方法開啟資料庫連接,以end方法關閉串連,具體代碼如下:
MDB mdb = Engine.getMDBOnly("c://test.db");<br />mdb.begin();<br />mdb.end();
2、密碼保護功能:
除記憶體模式之外,LMini提供了簡單的密碼保護功能,以防止資料庫檔案被他人盜用,只要在begin建立資料庫時設定即可,密碼錯誤時再次開啟此檔案將提示異常,具體代碼如下:
MDB mdb = Engine.getMDBOnly("test.db");<br />mdb.openTable("test",TypeBase.STRING);<br />//設定密碼<br />mdb.begin("wt98ab");<br />mdb.end();
3、增、刪、改、查:
LMini以openTable方法開啟或建立一個指定表格,但區別於其它資料庫,Lmini每個表格僅允許儲存一種資料類型,以簡化LMini檔案處理過程;目前其支援的類型為Long,Integer,String,Byte[],Object五種,我們可以通過Lmini提供的TypeBase類注入需要的類型。不填寫情況Lmini將預設Table Store類型為Object,也就是所有經過序列化的對象都可以儲存於本地硬碟之上。
LMini針對CRUD提供了相對應的insert、select、update、delete方法以供調用,只要注入相關對象即可完成操作,具體代碼如下:
MDB mdb = Engine.getMDBOnly("test.db");<br />mdb.openTable("test",TypeBase.STRING);<br />//設定密碼<br />mdb.begin("wt98ab");<br />//插入資料<br />mdb.insert("久保","砍砍砍");<br />mdb.insert("尾田", "我要成為海軍");<br />mdb.insert("岸本", "都死光了");<br />//刪除資料<br />mdb.delete("岸本");<br />//變更資料<br />mdb.update("尾田", "我要成為海賊王");<br />//查詢<br />System.out.println(mdb.select("尾田"));<br />mdb.end();
4、表格中資料的遍曆:
LMini提供了getTableKey方法以獲得當前表格下所有欄位名,提供了getTableList方法以獲得當前表格下所有欄位及資料,具體代碼如下:
MDB mdb = Engine.getMDBOnly("test.db");<br /> mdb.openTable("test",TypeBase.STRING);<br /> //設定密碼<br /> mdb.begin("wt98ab");<br /> //插入資料<br /> mdb.insert("久保","砍砍砍");<br /> mdb.insert("尾田", "我要成為海軍");<br /> mdb.insert("岸本", "都死光了");<br /> //刪除資料<br /> mdb.delete("岸本");<br /> //變更資料<br /> mdb.update("尾田", "我要成為海賊王");<br /> //查詢<br /> System.out.println("尾田說:"+mdb.select("尾田"));</p><p> for(Iterator it=mdb.getTableKey().iterator();it.hasNext();){<br /> String name=(String)it.next();<br /> System.out.println("欄位名:"+name);<br /> System.out.println("資料: "+(String)mdb.getTableList().get(name));<br /> }</p><p> mdb.end();
程式樣本:
本例提供了一個Lmini操作通訊錄的簡單操作樣本,利用開源metawidget項目所提供的addressbook-swing加以改造而成,僅替換其直接寫入程式碼在Table中資料為真實操作Lmini資料庫並修正部分英文表單為中文,metawidget項目所有權利均與本人無關,本樣本僅為借用其介面,特此聲明。(PS:源碼在jar中,另外使用metawidget的UI還挺費空間,要用5MB的支援庫|||……)
LMini的操作方式非常簡便,筆者昨天預告的TLOH項目的遊戲存檔器也將採用LMini加以實現,目前LMini還在不斷完善中,希望各位看客能給予支援及指正,另外現在發的LMini比Loonframework主包中的版本差一次更新,具體差別到發布Loonframework-0.2.0時就能看到了。
(這些小程式依例丟在code.google上):http://code.google.com/p/greenvm/downloads/list