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

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

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

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

          今天來講一講RMS。純粹是在做項目過程中自己的一些領悟總結,如果有不正確的地方,請高人們指點。

          在PC中我們可以將數據存在數據庫中進行管理。那么在手機上,我們將數據存在哪里呢,又是怎樣管理這些數據的呢?


          手機系統為每一個MIDlet都開辟了存儲空間用來存儲程序數據,并且有專門的管理系統來管理這個存儲空間。當然它只是一個簡單的管理系統,不可能像PC上那樣的數據庫管理工具。我們稱這個系統為“記錄管理系統(RMS)”,它是一個簡單的面向記錄的數據庫模型。

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

          注意:雖然我們可以將“記錄存儲”與“表”一起聯想,但是它們的結構有很多的不同。“表”是二維的,對應著行和列。而“記錄存儲”是一維的,所有記錄都是線性存放的。

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

        RecordStore rs;
        //存數據
        public boolean newDate(String scorce, String name) {
      byte[] byt;
      try {
       //指定記錄存儲的Name
       String storeName = "HighScorces";
       //打開該存儲,如果不存在,就新建。
       rs = RecordStore.openRecordStore(storeName, true);
       //添加一個記錄: scorce
       byt = scorce.getBytes();
       rs.addRecord(byt, 0, byt.length);
       //添加一個記錄:name
       byt = name.getBytes("UTF-8");
       rs.addRecord(byt, 0, byt.length);
       //關閉該記錄存儲
       rs.closeRecordStore();
      } catch (Exception e) {
       System.out.println("save false!");
       return false;
      }
      return true;
        }
        //讀數據
        public String[] getData(int type, boolean flg) {
      String[] strs = null;
      try {
       String storeName = "HighScorces";
       rs = RecordStore.openRecordStore(storeName, true);
       //獲取該存儲中的記錄總數
       int num = rs.getNumRecords();
       //獲取下一個可用記錄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) {
         //記錄不存在,檢查下一個記錄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(); 來獲取下一個可用記錄ID?
     在RecordStore中每一個record都會被分配一個ID,且該ID是從1開始的。最重要的是每個被使用過的ID是不能被重新分配的。即:當我們用 deleteRecord(int recordId) 刪除一個記錄后,該記錄的ID仍然不能被其他記錄使用,也就是該ID所指向的記錄是不存在的。因此,如果你用該ID去訪問記錄時,系統會拋出異常。但是,記錄的總數為實際存在的所有記錄的數目。所以我們可以通過獲取下一個可用記錄ID來進行相關操作。

     記錄存儲是由系統平臺來維護的,一般是不會丟失的。記錄存儲的生成位置也是由平臺決定的,并不會暴露給MIDlet。 MIDlet只依賴與記錄存儲的名字來訪問該記錄存儲。當一個MIDlet組件從系統刪除時,所有與此MIDlet有關的存儲記錄都會被系統自動刪除。

    posted on 2007-07-30 13:50 Fang.W 閱讀(1049) 評論(0)  編輯  收藏 所屬分類: J2ME
    主站蜘蛛池模板: 亚洲黄色免费网站| 国产偷国产偷亚洲高清日韩| 亚洲国产精品乱码一区二区 | 最近2019中文字幕免费大全5| 国产偷v国产偷v亚洲高清| aa级毛片毛片免费观看久| 亚洲一区二区三区国产精品| 偷自拍亚洲视频在线观看99| 四虎影永久在线高清免费| 婷婷亚洲综合五月天小说在线| 午夜精品在线免费观看| 亚洲av色香蕉一区二区三区蜜桃| 成人免费毛片内射美女-百度| 久久精品国产亚洲AV忘忧草18| 18pao国产成视频永久免费| 亚洲va成无码人在线观看| 免费无码又爽又刺激聊天APP| 亚洲国产成人综合精品| 免费a级毛片无码a∨性按摩| 丰满少妇作爱视频免费观看| 久久久久亚洲?V成人无码| 成人性做爰aaa片免费看| 久久亚洲精品无码AV红樱桃| 国产一卡二卡3卡四卡免费| 日韩亚洲产在线观看| 亚洲AV成人潮喷综合网| 三级毛片在线免费观看| 亚洲日韩区在线电影| 成人毛片免费观看| a高清免费毛片久久| 亚洲一卡2卡三卡4卡有限公司| 国产日本一线在线观看免费| 国产亚洲精品AAAA片APP| 国产中文在线亚洲精品官网| 美丽姑娘免费观看在线观看中文版| 亚洲免费视频观看| www.亚洲精品| 99re这里有免费视频精品| 亚洲欧美熟妇综合久久久久| 国产亚洲精品a在线观看| 免费看黄视频网站|