紀錄管理系統(Record Management System ,簡稱RMS)。他能使你能夠在手機設備的內存中持久地存儲數據。
一、記錄管理系統概覽
記錄管理系統簡單的說就是一個小型的數據庫。具有典型的數據庫的結構模型。RMS提供了RecordStore類,用於MIDlet應用程序和RMS通信。RecordStore相當於數據庫中的表。我們可以在每個表中,放置若干條記錄(Record),每條記錄包括兩列數據。如下圖所示:
存儲在RMS中的每個記錄存儲都和一個MIDlet套件相關聯(一個套件就是一個JAR文件,其中可以包括多個MIDlet類)。並且有一個文件名來標識他。
在記錄存儲中的每一條記錄都只有兩列表格,其中第一列是一個int型的整數表示紀錄的ID,另一列用一個byte型的數組表來記錄數據。記錄號可以看作是數據表的主鍵。不管你存儲的是字符串或整數,他們都按照byte數組從一條記錄讀出或寫入到一條記錄中。
二、深入RecordStore類
在MIDP API中,通過javax,microedition.rms包來支持RMS。這個包提供一個RecordStore類和幾個接口,來支持丟紀錄存儲的創建和操作。RecordStore類為單個紀錄存儲提供了可編程接口,使得對一個記錄存儲的讀寫操作變得非常簡單。
使用步驟:
1、打開或者創建一個記錄存儲。
2、從紀錄存儲中讀出數據或者向記錄存儲寫入數據。
3、關閉記錄存儲。
其中有些最為常用的方法:
openRecordStore()打開一個記錄存儲,以便讀出或寫入數據。
getNumRecords()獲得紀錄存儲中記錄的數目。
getRecordSize()獲得一條記錄的數據大小。
getRecord()從一個單獨的紀錄中獲得數據。
addRecord()向一個記錄存儲添加一條記錄的數據。
deleteRecord()刪除一條的紀錄。
deleteRecordStore()刪除整個記錄存儲。
closeRecordStore()關閉一個記錄存儲。
在使用記錄存儲之前,先要創建一個RecordStore對象。示例如下:
RecordStore rs = null ;
打開一個記錄存儲,可以使用RecordStore對象調用openRecordStore()方法來實現:
try{
rs = RecordStore .openRecordStore(“somename” , false );
}
catch( Exception e){
System.err.println(“Failed opening record store !”) ;
}
openRecordStore方法的第一個參數就是紀錄存儲的名字,第二個參數表示當指定名字的紀錄存儲不存在的話,是否應該創建一個新的記錄存儲。該參數如果為true,則表示當指定名字的紀錄存儲不存在的話可以創建一個新的同名記錄存儲並打開,false表示僅打開已存在的記錄存儲,不會創建記錄存儲。
使用前面創建的記錄存儲後就可以判斷是否已經成功的打開一個記錄存儲了。
下面我們就可以往打開的記錄存儲中寫入記錄了:
try{
rs.addRecord(redordData, 0 , recordData.length);
}
catch ( Exception e ){
System.err.println( “ Failed writhing to record store ! ”);
}
其中addRecord方法中的第一個參數就是包含記錄數據的一個byte數組。後兩個參數表示數據在數組中的開始位置和寫入數據的字節數。上面的例子我們將數組中的所有數據寫入了記錄存儲。
如果知道存儲數據的大小,我們可以簡單的使用getRecord方法:
byte []tmp = new byte[n] ;
try
{
tmp = rs.getRecord(recordid) ;
}catch(Exception e)
{
}
這裡我們只是用了紀錄的ID作為參數即可。
如果不知道存儲數據的大小就顯得麻煩寫了。
方法一:
我們可以分配足夠大的數組來保存讀出的數據如下所示:
byte []tmp = new byte[n] ;
上面的例子我們使用了三個參數。第一個參數仍然是紀錄ID,第二個參數是要存放數據的數組,第三個參數表示從第一位開始讀。
try
{
int len = rs.getRecord(recordid , tmp , 0) ;
}catch(Exception e)
{
}
如果要刪除整個紀錄存儲的話,我們使用deleteRecordStore方法就可以了,它只需要提供記錄存儲的名字做參數。示例如下:
try{
RecordStore.deleteRecordStore(“somename”);
}
catch (Exception e){
}
最後在使用完畢,我們要記得使用closeRecordStore方法關閉已經打開的記錄存儲。
try{
rs.closeRecordStore() ;
}
catch(Exception e){
}
當然這裡的內容很簡單也不夠全面,但對於一個游戲是夠了。更詳細的內容我們將在後續文章中講解。