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

          先攻J2ME!

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章檔案

          我們志同道合

          我要飛……

          積分與排名

          • 積分 - 16122
          • 排名 - 1938

          最新評論

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

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


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

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

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

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

              RecordStore rs;
              //存數(shù)據(jù)
              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;
              }
              //讀數(shù)據(jù)
              public String[] getData(int type, boolean flg) {
            String[] strs = null;
            try {
             String storeName = "HighScorces";
             rs = RecordStore.openRecordStore(storeName, true);
             //獲取該存儲中的記錄總數(shù)
             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去訪問記錄時,系統(tǒng)會拋出異常。但是,記錄的總數(shù)為實際存在的所有記錄的數(shù)目。所以我們可以通過獲取下一個可用記錄ID來進行相關操作。

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

          posted on 2007-07-30 13:50 Fang.W 閱讀(1054) 評論(0)  編輯  收藏 所屬分類: J2ME
          主站蜘蛛池模板: 甘洛县| 景德镇市| 阿尔山市| 昭通市| 西乡县| 临沭县| 新竹县| 海南省| 中阳县| 海阳市| 修文县| 麻栗坡县| 通辽市| 大余县| 黎川县| 三门峡市| 鄂州市| 凭祥市| 黑水县| 信宜市| 邹平县| 五大连池市| 广宁县| 崇明县| 西城区| 兴安县| 梅河口市| 丰宁| 翁源县| 神池县| 习水县| 天祝| 胶州市| 华容县| 孝义市| 鸡西市| 义马市| 嘉黎县| 离岛区| 鹤岗市| 土默特右旗|