實(shí)戰(zhàn)J2ME中RMS開發(fā)
RMS 提供常用的方法:打開存儲表,J2ME提供了統(tǒng)計(jì)的靜態(tài)方法處理打開表的操作。
- public static RecordStore openRecordStore(String recordStoreName,
- boolean createIfNecessary,
- int authmode,
- boolean writable)
- throws RecordStoreException, RecordStoreFullException,
- RecordStoreNotFoundException
recordStoreName -- 需要打開的表名
createIfNecessary -- 如果存在就打開,如果不存在就創(chuàng)建,假如ture的情況,fasle則只打開存在的表
Authmode -- 訪問的方法權(quán)限
Writable -- 是否允許外部MIDlet套件訪問,如果表存在,此參數(shù)是可忽略的。
刪除存儲表:
- public static void deleteRecordStore(String recordStoreName)
- throws RecordStoreException, RecordStoreNotFoundException
刪除表格,recordStoreName-為指定的表格名稱,如果表格正在打開,或者不存在都會拋出異常。
RMS,最常用的操作是添加,編輯,刪除,更新記錄。
添加,RMS只支持添加二進(jìn)制的數(shù)據(jù),一般采用DataOutputStream的方式進(jìn)行序列化。
- public int addRecord(byte[] data, int offset, int numBytes)
- throws RecordStoreNotOpenException, RecordStoreException,
- RecordStoreFullException
data -- 保存數(shù)據(jù)
offset -- 起始索引
numBytes -- 長度
刪除
- public void deleteRecord(int recordId)
- throws RecordStoreNotOpenException, InvalidRecordIDException,
- RecordStoreException
recordId -- 記錄的索引,一般采用遍歷的方式獲取索引,或者通過addRecord也可以返回對于的索引。
編輯,更新
- public void setRecord(int recordId, byte[] newData,
- int offset, int numBytes)
更新指定索引的記錄。
一般的添加記錄的方式:
1.構(gòu)建一個DataOutputStream流進(jìn)行寫操作,然轉(zhuǎn)換成byte[] 寫入RMS中。
2.示例
- ByteArrayOutputStream sBout = new ByteArrayOutputStream();
- DataOutputStream sDout = new DataOutputStream(sBout);
- sDout.wirteInt();
- sDout.writeUTF();
- ....................
- sBout.toByte() .
- Svae(byte);
RMS操作就是如此簡單。
注意問題
注意對RMS容量的控制。
不建議直接刪除表,應(yīng)該逐條刪除記錄,然后再刪除表。
實(shí)戰(zhàn)Demo
筆者采用RMS寫的簡單數(shù)據(jù)庫引擎。
次引擎支持:
1,添加,刪除,編輯,遍歷,查詢記錄。
采用的是類SQL方式。比如你可以crate table,delete table,insert, select等方式操作記錄。
具體內(nèi)部實(shí)現(xiàn)方式這里就不一一闡述了,有興趣的讀者可以自行研究代碼。
下載地址: http://wuhua.javaeye.com/blog/54528
4.電話本案例
本案例只是介紹筆者RMS引擎的用法,有相當(dāng)部分的功能未能在這里闡述,有興趣的讀者可以自行自行研究代碼。
程序功能
1.添加聯(lián)系人包括聯(lián)系資料是: 姓名, 手機(jī), email, 地址.
2.修改聯(lián)系人資料.
3.查詢聯(lián)系人資料,
4.刪除聯(lián)系人.
項(xiàng)目設(shè)計(jì)
1.采用本人寫的簡單的rms數(shù)據(jù)引擎. 也算是一個比較豐富的例子供大家學(xué)習(xí)交流
2.采用高級UI展示.
3.整體架構(gòu)采用Web常用的方式MVC結(jié)構(gòu),充分展示j2me設(shè)計(jì)也可以很靈活.并且在性能方面的問題不大
這里介紹幾個系統(tǒng)核心接口:
ResultSet --- 對數(shù)據(jù)操作的結(jié)構(gòu)集, 比如查詢的時候?qū)⒎祷匾粋€可用的結(jié)構(gòu).里面的用法跟JDBC差不多.
Query --- 對本人自定義的sql進(jìn)行執(zhí)行,執(zhí)行返回ResultSet結(jié)構(gòu)
DataBaseServer --- 對RMS引擎的啟動,關(guān)閉.資源處理,擺脫直接操作RMS各個異常的困擾
QueryBuilder --- 靜態(tài)工廠類,通過sql創(chuàng)建一個Query實(shí)例.
關(guān)于自定義SQL語法設(shè)計(jì)
比如創(chuàng)建表格語法是
create :friend: f_name :f_mobile :f_email :f_address
插入數(shù)據(jù)是:
- Query q = QueryBuilder.builder("insert :friend :f_name :f_mobile :f_email: f_address ");
- q.setString("f_name",friend.getName() );
- q.setString("f_mobile", friend.getPhone());
- q.setString("f_email", friend.getEmail());
- q.setString("f_address", friend.getAddress());
- q.execute();
1. 添加表格
- create table_name column_1 column_2 column_3 ......
- drop table_name
2. 操作數(shù)據(jù)
insert table_name column_1 ..... 對于這個操作,然后具體在api調(diào)用setString(index, value)
update table_name set ..... where column_1 = key;
select table_name f_id=1;
源代碼下載:http://rongqing.rao.googlepages.com/PhotoBook.rar
關(guān)于作者
饒榮慶
從事J2ME,Android開發(fā)工作多年,現(xiàn)在就職于UCWEB。從事瀏覽器相關(guān)的開發(fā)工作。
【編輯推薦】