亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

怎樣在J2ME上實現記錄管理存儲

2019-11-18 12:45:33
字體:
來源:轉載
供稿:網友

  移動信息設備框架(Mobile Information Device PRofile)--移動 java 應用程序的平臺 ,為 MIDP 應用程序提供一種跨多個調用持久存儲數據的機制。這種持久存儲機制可以被視為一種簡單的面向記錄的數據庫模型,被稱為記錄治理系統(record management system(RMS))。在此,Soma Ghosh 說明了您的 J2ME 應用程序怎樣能夠使用 RMS 來治理和解釋數據。通過一個樣本電話數據庫,您還將了解到關于這個概念的說明。
  
  J2ME 記錄治理系統
  
  J2ME 記錄治理系統(RMS)提供了一種機制,通過這種機制,MIDlet 能夠持久存儲數據,并在以后檢索數據。在面向記錄的方法中,J2ME RMS 由多個記錄存儲構成。
  
  可以將每個記錄存儲想像成一個記錄集合,它將跨多個 MIDlet 調用持久存在。設備平臺負責在平臺正常使用的整個過程(包括重新啟動、換電池等)中,盡全力維護 MIDlet 的記錄存儲的完整性。
  
  記錄存儲在與平臺相關的位置(比如非易失性設備存儲器)創建,這些位置不直接公開給 MIDlet。RMS 類調用特定于平臺的本機代碼,這種本機代碼使用標準 OS 數據治理器函數來執行實際的數據庫操作。
  
  記錄存儲實現確保所有單個的記錄存儲操作都是原子的、同步的以及序列化的,因此多個訪問將不會出現數據毀壞。記錄存儲被蓋上時間戳來指示它上次被修改的時間。記錄存儲還維護版本(version),它是一個整數,修改記錄存儲內容的操作每發生一次,這個數加一。版本和時間戳對于同步目的很有用。
  
  當 MIDlet 使用多個線程訪問一個記錄存儲時,協調該訪問是 MIDlet 的責任;假如它不能這樣做,可能出現無法意料的結果。同樣,假如一個平臺使用試圖同時訪問記錄存儲的多個線程執行記錄存儲的同步,那么對 MIDlet 及其同步引擎之間的記錄存儲實施排外訪問是平臺的責任。
  
  記錄存儲中的每個記錄是一個字節數組,并且有唯一的整數標識符。
  
  治理設備數據庫
  javax.microedition.rms.RecordStore 類代表 RMS 記錄存儲。它提供了幾個方法來治理以及插入、更新和刪除記錄存儲中的記錄。
  
  治理記錄存儲
  要打開一個記錄存儲,調用 javax.microedition.rms.RecordStore 的 openRecordStore() 方法。public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary) 打開具有指定名稱 recordStoreName 的記錄存儲。假如沒有具有這個名稱的記錄存儲,那么調用這個方法來創建一個。
  
  假如記錄存儲已經打開,這個方法將返回對同一個記錄存儲對象的引用。
  
  清單 1. 打開一個 RecordStore
  RecordStore rs = RecordStore.openRecordStore("MyAppointments",true);
  
  一旦所有操作完成,對 closeRecordStore() 的調用將關閉指定名稱的記錄存儲。當一個記錄存儲被關閉時,不能進行進一步的操作。
  
  清單 2. 關閉一個 RecordStore
  Rs.closeRecordStore();
  
  通過調用 deleteRecordStore() 方法可以刪除指定名稱的記錄存儲。
  
  清單 3. 刪除一個 RecordStore
  RecordStore.deleteRecordStore("MyAppointments");
  
  插入記錄
  MIDlet 調用 javax.microedition.rms.RecordStore 類的 addRecord() 方法來將一條新記錄插入到記錄存儲中。這是阻塞的原子操作,并返回新記錄的 recordId。在這個方法返回之前,記錄被寫到持久存儲中。
  
  public int addRecord(byte[] data, int offset, int numBytes) 插入一條由字節數組 data 代表的記錄,這個數組以 offset 作為它的起始索引,numBytes 作為它的長度。
  
  清單 4. 插入一條記錄
  String aPPT = "new record";
  byte bytes[] = appt.getBytes();
  rs.addRecord(bytes,0,bytes.length);
  
  更新記錄
  更新一條非凡記錄包括獲取這個記錄的句柄以及設置新信息。
  
  public int getRecord(int recordId, byte[] buffer, int offset) 返回存儲在由 buffer 代表的字節數組中給定記錄的數據。public byte[] getRecord(int recorded) 返回由 recordId 代表的數據的副本。public void setRecord(int recordId, byte[] newData, int offset, int numBytes) 在 recordId 所代表記錄的位置設置新信息,新信息是以 offset 作為它的起始索引,并以 numBytes 作為它的長度的字節流(newData)。
  
  清單 5. 更新一條記錄
  String newappt = "update record";
  Byte data = newappt.getBytes();
  Rs.setRecord(1, data, 0, data.length());
  
  刪除記錄
  MIDlet 調用 deleteRecord() 方法來從記錄存儲中刪除記錄。
  
  public void deleteRecord(int recordId) 刪除由 recordId 代表的記錄。這個記錄的 recordId 接下來不能重用。
  
  清單 6. 刪除一條記錄
  Rs.deleteRecord(1);
  
  數據解釋
  J2ME API 提供某種接口來解釋存儲在記錄存儲中的數據。這個過程包括比較記錄來確定它們的相對排序。它還包括根據給定條件的內容過濾。
  
  比較記錄
  MIDlet 實現 RecordComparator 接口,并定義 compare (byte[] rec1, byte[] rec2) 方法來比較兩個候選記錄。這個方法的返回值必須指示這兩條記錄的順序。
  
  清單 7. 比較記錄并確定相對排序
  Int compare (byte[] b1, byte[] b2)
  {
  String s1 = new String(b1);
  String s2 = new String(b2);
  
  If (s1.compareTo(s2) > 0)
  Return RecordComparator.FOLLOWS;
  Else if (s1.compareTo(s2) == 0)
  Return RecordComparator.EQUIVALENT;
  Else
  Return RecordComparator.PRECEDES;
  }
  
  枚舉記錄
  RecordEnumeration 接口負責枚舉記錄存儲中的記錄。它邏輯上維護記錄存儲中一連串的記錄的 recordId。枚舉器將以記錄比較器確定的順序迭代所有記錄(或者假如提供了一個可選的記錄過濾器,那么只是一個子集)。假如既沒有指定過濾器又沒有指定比較器,枚舉將以未定義的順序遍歷記錄存儲中的所有記錄。
  
  清單 8. 枚舉記錄
  RecordEnumeration re = rs.enumerateRecords(null, null, false);
  If (re.hasNextElement())
  Byte nextRec[] = re.nextRecord();
  
  過濾記錄
  MIDlet 實現 RecordFilter 接口,定義檢查記錄是否滿足應用程序定義的標準的過濾器。這個應用程序實現 RecordFilter 的 match() 方法來選擇 RecordEnumeration 返回的記錄。
  
  清單 9. 過濾記錄
  Public boolean matches(byte[] candidate)
  {
  String s1 = new String(candidate);
  If (s1.equals("XX"))
  Returns true;
  Else
  Returns false;
  }
  
  開發電話約會簿
  在這部分,我們將通過構建一個電話約會簿來說明 J2ME RMS 的功能。這個應用程序將答應用戶設置某個日期和時間的約會,取消約會或查看已經設置好的約會列表。一個快捷屏幕視圖如圖 2 所示。
  
  圖 2. 工作中的電話約會簿
  
  構成這個應用程序的各種屏幕以及屏幕元素的用戶界面元素的完整列表在與 J2ME Wireless Toolkit 一起提供的 MID 框架 API 文檔中可以得到;要獲取關于這些元素的更多具體信息,請查閱我早些時候給 developerWorks 寫的一篇文章(請參閱下面的參考資料部分以獲取這兩個鏈接)。
  
  記錄存儲可以以字節流形式存儲記錄。在我們的應用程序中,用戶輸入的日期和時間被連接成一個字符串,轉換成字節,然后被存儲。
  
  清單 10. 將一個新的約會添加到數據庫中
  Public boolean matches(byte[] candidate)
  String appt = apptName + " " + apptTime;
  byte bytes[] = appt.getBytes();
  rs.addRecord(bytes,0,bytes.length);
  
  同樣,這個應用程序以字節流形式檢索記錄,然后將它轉換成一個字符串。這個字符串以 ####AAAA 格式,其中 # 表示代表時間信息的數字,AAAA 表示代表約會描述的字符。這個應用程序解析這個字符串來獲得日期和時間信息,并以用戶所希望的格式顯示它們,比如 description - mm/dd/yyyy hh:mm AM_PM。
  
  清單 11. 從記錄存儲檢索一條記錄
  byte b[] = rs.getRecord(j);
  String str = new String(b,0,b.length);
  
  清單 12. 解析從記錄存儲獲得的數據,然后以用戶所希望的格式顯示
  if (Character.isDigit(str.charAt(i)))
  at += str.charAt(i);
  else
  name += str.charAt(i);
  time = Long.parseLong(at);
  java.util.Date date = new java.util.Date(time);
  java.util.Calendar rightNow = java.util.Calendar.getInstance();
  rightNow.setTime(date);
  String year = String.valueOf
  (rightNow.get(java.util.Calendar.YEAR));
  String month = String.valueOf
  (rightNow.get(java.util.Calendar.MONTH) + 1);
  String day = String.valueOf
  (rightNow.get(java.util.Calendar.DATE));
  String displayName = name
  + "-" + year + " " + day;
  
  用戶被答應從記錄存儲中選擇某種約會以及將它們從記錄存儲中刪除。因為為了維持記錄中原始的順序所刪除的 recordId 不能重用,所以這個記錄通過特有的字符串模式標記為無效。
  
  清單 13. 將一條記錄標記為已刪除
  Str

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品99久久久久久人| 日韩电影免费在线观看| 国产欧美日韩中文| 欧美高清视频在线| 欧美日韩国产第一页| 美女av一区二区三区| 亚洲国产97在线精品一区| 欧美丝袜一区二区三区| 中文精品99久久国产香蕉| 久久福利视频网| 国内精品视频久久| 日韩亚洲精品电影| 亚洲精品aⅴ中文字幕乱码| 日韩精品在线观| 性色av香蕉一区二区| 日韩av中文字幕在线免费观看| 日本a级片电影一区二区| 色婷婷久久一区二区| 国产女同一区二区| 亚洲无亚洲人成网站77777| 国产日韩在线播放| 久久久99久久精品女同性| 中文字幕少妇一区二区三区| 亚洲一区二区三区777| 中文字幕av日韩| 国产精品一区二区久久| 国产成人精品视频在线| 日韩av网站电影| 国产999精品久久久影片官网| 色噜噜狠狠狠综合曰曰曰88av| 色青青草原桃花久久综合| 欧美午夜视频在线观看| 日韩精品欧美国产精品忘忧草| 欧美精品18videos性欧美| 插插插亚洲综合网| 亚洲精品一区久久久久久| 久久成人人人人精品欧| 国产精品成人在线| 久久亚洲国产精品成人av秋霞| 国产一区二区三区视频免费| 美日韩在线视频| 亚洲精品影视在线观看| 亚洲免费高清视频| 最新69国产成人精品视频免费| 国产精品精品一区二区三区午夜版| 97香蕉超级碰碰久久免费软件| 亚洲精品欧美日韩专区| 精品国偷自产在线| 欧美多人爱爱视频网站| 日韩亚洲综合在线| 国产高清视频一区三区| 国产精品私拍pans大尺度在线| 国产婷婷成人久久av免费高清| 日韩美女激情视频| 日韩欧美在线视频| 国产欧美日韩精品专区| 精品香蕉一区二区三区| 亚洲成人网在线观看| 亚洲综合在线中文字幕| 日韩av电影在线播放| 久久精品国产亚洲7777| 国产精品影院在线观看| 亚洲国产精品成人va在线观看| 亚洲精品99久久久久| 亚洲国产欧美一区二区丝袜黑人| 深夜成人在线观看| 久久久www成人免费精品张筱雨| 96国产粉嫩美女| 久精品免费视频| 国产精品久久9| 色综合久久久888| 国产精品国产三级国产aⅴ浪潮| 久久久免费在线观看| 久久精品色欧美aⅴ一区二区| 亚洲欧美综合图区| 亚洲激情视频在线观看| 欧美另类69精品久久久久9999| 亚洲永久在线观看| 久久久99免费视频| 亚洲性线免费观看视频成熟| 亚洲精品国产精品国产自| 欧美极品美女视频网站在线观看免费| 992tv在线成人免费观看| 操日韩av在线电影| 国产精品日韩欧美| 国产精品欧美一区二区三区奶水| 91夜夜揉人人捏人人添红杏| 国产成人一区二区三区| 久久人91精品久久久久久不卡| 国产精品久久久久久久app| 爱福利视频一区| 国产va免费精品高清在线观看| 亚洲社区在线观看| 97香蕉久久超级碰碰高清版| 亚洲品质视频自拍网| 亚洲v日韩v综合v精品v| 欧美在线视频网站| 国产黑人绿帽在线第一区| 国产99久久精品一区二区永久免费| 日韩精品亚洲元码| 自拍偷拍亚洲在线| 久久色免费在线视频| 国产精品国产亚洲伊人久久| 中文字幕日韩精品有码视频| 毛片精品免费在线观看| 久久精品99久久香蕉国产色戒| 久久噜噜噜精品国产亚洲综合| 欧美在线视频在线播放完整版免费观看| 日韩黄色在线免费观看| 欧美国产精品日韩| 在线观看欧美www| 一区二区三区四区在线观看视频| 秋霞成人午夜鲁丝一区二区三区| 欧美专区中文字幕| 中文字幕国内精品| 欧美一区二区影院| 欧美一级视频一区二区| 成人午夜在线视频一区| 日韩精品一区二区三区第95| 这里只有精品久久| 一级做a爰片久久毛片美女图片| 日本不卡视频在线播放| 亚洲人成电影网| 国产精品成人播放| 久久亚洲春色中文字幕| 久久91精品国产91久久跳| 亚洲激情在线观看视频免费| 91精品国产乱码久久久久久久久| 97精品国产97久久久久久| 日韩av网站在线| 久久久亚洲网站| 欧美人与性动交a欧美精品| 欧美性感美女h网站在线观看免费| 深夜福利一区二区| 欧美日韩电影在线观看| 在线观看不卡av| 久久影院在线观看| 亚洲图中文字幕| 亚洲www在线观看| 高清一区二区三区日本久| 国产精品v日韩精品| 日韩视频―中文字幕| 国产日韩在线视频| 国产成人在线亚洲欧美| 久久欧美在线电影| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲成色www8888| 日本韩国欧美精品大片卡二| 亚洲精品97久久| 亚洲xxxx妇黄裸体| 亚洲精品国偷自产在线99热| 国产精品福利观看| 91在线观看免费高清| 欧美壮男野外gaytube| 国产精品日韩在线一区| 欧美视频在线免费看| 在线播放日韩专区| 国产精品视频一区国模私拍| 91sao在线观看国产| 日本国产欧美一区二区三区| 97视频在线观看视频免费视频| zzijzzij亚洲日本成熟少妇| 国产一区二区精品丝袜| 国产精品v日韩精品|