<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Fang.W
    我也是江湖中人,但沒有武功,比的是技術(shù)!——21世紀(jì)的江湖人

          今天來講一講RMS。純粹是在做項(xiàng)目過程中自己的一些領(lǐng)悟總結(jié),如果有不正確的地方,請(qǐng)高人們指點(diǎn)。

          在PC中我們可以將數(shù)據(jù)存在數(shù)據(jù)庫(kù)中進(jìn)行管理。那么在手機(jī)上,我們將數(shù)據(jù)存在哪里呢,又是怎樣管理這些數(shù)據(jù)的呢?


          手機(jī)系統(tǒng)為每一個(gè)MIDlet都開辟了存儲(chǔ)空間用來存儲(chǔ)程序數(shù)據(jù),并且有專門的管理系統(tǒng)來管理這個(gè)存儲(chǔ)空間。當(dāng)然它只是一個(gè)簡(jiǎn)單的管理系統(tǒng),不可能像PC上那樣的數(shù)據(jù)庫(kù)管理工具。我們稱這個(gè)系統(tǒng)為“記錄管理系統(tǒng)(RMS)”,它是一個(gè)簡(jiǎn)單的面向記錄的數(shù)據(jù)庫(kù)模型。

          來看看一些名詞:
          (1)記錄存儲(chǔ):在一個(gè)程序中,你可以開辟n個(gè)記錄存儲(chǔ),為每一個(gè)“存儲(chǔ)”指定唯一的名字。它就相當(dāng)于我們常說的“表”。
          (2)記錄:每個(gè)記錄存儲(chǔ)中包含著n個(gè)記錄。即“表”中的每一個(gè)數(shù)據(jù)。

          注意:雖然我們可以將“記錄存儲(chǔ)”與“表”一起聯(lián)想,但是它們的結(jié)構(gòu)有很多的不同。“表”是二維的,對(duì)應(yīng)著行和列。而“記錄存儲(chǔ)”是一維的,所有記錄都是線性存放的。

          來看一段程序,演示了如何使用RMS來存儲(chǔ)程序中的數(shù)據(jù),比如存取游戲最高分。

        RecordStore rs;
        //存數(shù)據(jù)
        public boolean newDate(String scorce, String name) {
      byte[] byt;
      try {
       //指定記錄存儲(chǔ)的Name
       String storeName = "HighScorces";
       //打開該存儲(chǔ),如果不存在,就新建。
       rs = RecordStore.openRecordStore(storeName, true);
       //添加一個(gè)記錄: scorce
       byt = scorce.getBytes();
       rs.addRecord(byt, 0, byt.length);
       //添加一個(gè)記錄:name
       byt = name.getBytes("UTF-8");
       rs.addRecord(byt, 0, byt.length);
       //關(guān)閉該記錄存儲(chǔ)
       rs.closeRecordStore();
      } catch (Exception e) {
       System.out.println("save false!");
       return false;
      }
      return true;
        }
        //讀數(shù)據(jù)
        public String[] getData(int type, boolean flg) {
      String[] strs = null;
      try {
       String storeName = "HighScorces";
       rs = RecordStore.openRecordStore(storeName, true);
       //獲取該存儲(chǔ)中的記錄總數(shù)
       int num = rs.getNumRecords();
       //獲取下一個(gè)可用記錄ID
       int recordID = rs.getNextRecordID();
       //
       strs = new String[num / 2];
       byte[] bytes;
       for (int i = 0, j = 0; (i < recordID - 1)&&(j<num/2);) {
        i += 2;
        try {
         if (flg) {
          //讀取name
          bytes = rs.getRecord(i);
         } else {
          //讀取scorce
          bytes = rs.getRecord(i-1);
         }
         strs[j] = new String(bytes,"UTF-8");
         j++;
        } catch (InvalidRecordIDException ide) {
         //記錄不存在,檢查下一個(gè)記錄ID
         continue;
        }
       }
       rs.closeRecordStore();
      } catch (RecordStoreException e) {
       System.out.println("no data!");
       strs = null;
      }catch (IOException ie){
       System.out.println("IOException!");
       strs = null;
      }
      return strs;
        }
     在這里解釋一下,為什么要用 int recordID = rs.getNextRecordID(); 來獲取下一個(gè)可用記錄ID?
     在RecordStore中每一個(gè)record都會(huì)被分配一個(gè)ID,且該ID是從1開始的。最重要的是每個(gè)被使用過的ID是不能被重新分配的。即:當(dāng)我們用 deleteRecord(int recordId) 刪除一個(gè)記錄后,該記錄的ID仍然不能被其他記錄使用,也就是該ID所指向的記錄是不存在的。因此,如果你用該ID去訪問記錄時(shí),系統(tǒng)會(huì)拋出異常。但是,記錄的總數(shù)為實(shí)際存在的所有記錄的數(shù)目。所以我們可以通過獲取下一個(gè)可用記錄ID來進(jìn)行相關(guān)操作。

     記錄存儲(chǔ)是由系統(tǒng)平臺(tái)來維護(hù)的,一般是不會(huì)丟失的。記錄存儲(chǔ)的生成位置也是由平臺(tái)決定的,并不會(huì)暴露給MIDlet。 MIDlet只依賴與記錄存儲(chǔ)的名字來訪問該記錄存儲(chǔ)。當(dāng)一個(gè)MIDlet組件從系統(tǒng)刪除時(shí),所有與此MIDlet有關(guān)的存儲(chǔ)記錄都會(huì)被系統(tǒng)自動(dòng)刪除。

    posted on 2007-07-30 13:50 Fang.W 閱讀(1055) 評(píng)論(0)  編輯  收藏 所屬分類: J2ME
    主站蜘蛛池模板: 一个人看的www在线免费视频| 亚洲av无码片在线观看| 免费又黄又爽又猛大片午夜| 亚色九九九全国免费视频| 亚洲国产精品久久久久婷婷软件| 国产做国产爱免费视频| 日韩va亚洲va欧洲va国产| 国产成人无码区免费网站| 久久精品国产亚洲夜色AV网站| a毛片免费观看完整| 亚洲人成网站在线播放影院在线| 91香蕉国产线在线观看免费| 亚洲精品视频免费看| 无码少妇一区二区浪潮免费| 伊人久久五月丁香综合中文亚洲| 成人免费a级毛片| 美景之屋4在线未删减免费| 亚洲精品A在线观看| 国产一级婬片A视频免费观看| 亚洲精品无码午夜福利中文字幕| 中文字幕无码免费久久| 99ri精品国产亚洲| 无码中文字幕av免费放| 老外毛片免费视频播放| 亚洲日韩v无码中文字幕| 91成人在线免费视频| 亚洲 日韩经典 中文字幕| 国产乱子伦片免费观看中字| 夜夜亚洲天天久久| 无码国产精品一区二区免费I6| 久久亚洲中文字幕无码| 亚洲精品无码成人片久久| 91久久青青草原线免费| 国产精品无码亚洲一区二区三区| 在线亚洲精品自拍| 国产成人免费午夜在线观看| 成人亚洲国产精品久久| 亚洲人成人77777网站| 色妞WWW精品免费视频| 久青草视频在线观看免费| 亚洲人成网男女大片在线播放 |