J2ME使用 RecordStore存储读取记录

来源:互联网 发布:尔雅网络 编辑:程序博客网 时间:2024/06/01 07:55

 

一 RecordStore(RMS)简介

    javax.microedition.rms 这个包提供给J2ME Application一个小型的数据库, RecordStore就是这个包的核心。原则上在一个MIDlet中可以放置多个RecordStore,同一个MIDlet suite中可以共享同一个RecordStore进行存取,不同的MIDlet suite不能存取同一个MIDlet suite。
 
它的诸多特性如下:  
在MIDlet suite中每一个RecordStore的名称是唯一的,不能重复,而不同的MIDlet suite可以使用同名的RecordStore。
创建RecordStore名称时,字母是区分大小写的,且名称字符串不能超过32个字符。
 
基本存储读取模式:
    RecordStore由多条记录(Record)所组成。

    key1|content;key2|content;key2|content...
    就是 key|content pair, 这个pair算一条记录。

二 创建RecordStore(RMS)对象

    使用RecordStore.openRecordStore函数,打开一个存储对象并取得句柄rs,然后使用rs.addRecord向存储对象中添加记录,最后关闭存储对象rs.closeRecordStore,完成初始化过程。

 

view plaincopy to clipboardprint?
  1. public void initRecord(){  
  2.     //--------------------------  
  3.     //--- Initialize RecordStore  
  4.     //--------------------------  
  5.     RecordStore rs = null;  
  6.     String[] strData = null;  
  7.     int n;  
  8.     try{  
  9.         rs = RecordStore.openRecordStore("history"true);  
  10.         strData = new String[]{""};  
  11.   
  12.         // history.1 = history data  
  13.          
  14.         n = strData.length - rs.getNumRecords();  
  15.         for (int i = (strData.length - n); i < strData.length; i ++){  
  16.             rs.addRecord(strData[i].getBytes(), 0, strData[i].getBytes().length);  
  17.         }  
  18.         rs.closeRecordStore();  
  19.   
  20.     }catch(Exception e){  
  21.         System.out.println("RecInitErr: " + e.toString());  
  22.         if (rs != null){  
  23.             try{  
  24.                 rs.closeRecordStore();  
  25.             }catch(Exception e2){}  
  26.         }  
  27.     }  
  28.     strData = null;  
  29. }  

 

三 存储RecordStore(RMS)对象

需要一个索引ID和所需要存储的内容strData,这个过程需要把整个RMS打开,寻找拥有这个索引ID的record。如果找到了,就更新这个record; 如果没有,就新建立一个。

参数String strName是存储对象名

参数String strData是需要存储的字符串

参数int intID是该字符的索引ID

首先,判断存储对象是否存在,如果存在,使用rsWrite.setRecord方法来更新存储对象。

 

view plaincopy to clipboardprint?
  1. public boolean writeRecord(String strName, String strData, int intID){  
  2.     //----------------------------  
  3.     //--- RecordStore的存储  
  4.     //----------------------------  
  5.     RecordStore rsWrite = null;  
  6.     try{  
  7.         rsWrite = RecordStore.openRecordStore(strName, true);  
  8.         byte[] bytWrite = strData.getBytes();  
  9.         if (rsWrite.getNumRecords() == 0){  
  10.             //--- RecordStore不存在,则生成之  
  11.               rsWrite.addRecord(bytWrite, 0, bytWrite.length);  
  12.         }else{  
  13.             //--- RecordStore更新  
  14.               rsWrite.setRecord(intID, bytWrite, 0, bytWrite.length);  
  15.         }  
  16.         rsWrite.closeRecordStore();  
  17.         return true;  
  18.     }catch(Exception e){  
  19.         if (rsWrite != null){  
  20.             try{  
  21.                 rsWrite.closeRecordStore();  
  22.             }catch(Exception e2){}  
  23.         }  
  24.         return false;  
  25.     }  
  26. }  

 

四 读取RecordStore(RMS)对象

只需要提供 索引ID, 然后打开 RMS 寻找拥有这个索引ID的record,如果找到了就重组成数据,不然就是没有这个record。

参数String strName是读取对象名

参数int intID是读取索引ID

返回值String是需要读取的字符串

 

view plaincopy to clipboardprint?
  1. public String readRecord(String strName, int intID){  
  2.     //----------------------------  
  3.     //--- RecordStore的读取  
  4.     //----------------------------  
  5.     RecordStore rsRead = null;  
  6.     try{  
  7.         rsRead = RecordStore.openRecordStore(strName, false);  
  8.         byte[] bytRead = rsRead.getRecord(intID);  
  9.         rsRead.closeRecordStore();  
  10.         return new String(bytRead);  
  11.     }catch(Exception e){  
  12.         if (rsRead != null){  
  13.             try{  
  14.                 rsRead.closeRecordStore();  
  15.             }catch(Exception e2){}  
  16.         }  
  17.         return "";  
  18.     }  
  19. }  

 

说明:

    在J2ME Application/Game中,RMS经常用到。一些特殊的参数或者游戏的状态可以用RMS存储起来, 到用的时候读取就行了。

原创粉丝点击