J2ME應(yīng)用教程 4 記錄管理系統(tǒng).ppt_第1頁
J2ME應(yīng)用教程 4 記錄管理系統(tǒng).ppt_第2頁
J2ME應(yīng)用教程 4 記錄管理系統(tǒng).ppt_第3頁
J2ME應(yīng)用教程 4 記錄管理系統(tǒng).ppt_第4頁
J2ME應(yīng)用教程 4 記錄管理系統(tǒng).ppt_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、記錄管理系統(tǒng),陳旭東,2020年8月2日,2,內(nèi)容,RMS概述 記錄庫操作 記錄操作 監(jiān)視記錄庫 記錄的查詢與排序,RMS概述,記錄管理系統(tǒng)(Record Management System, RMS) 小型、簡單數(shù)據(jù)庫管理系統(tǒng) 可以保存簡單數(shù)據(jù) 可以將對象狀態(tài)經(jīng)過序列化之后,保存到記錄管理系統(tǒng) 記錄管理系統(tǒng)存在于設(shè)備特定的存儲空間,稱為RMS空間,RMS,數(shù)據(jù)是保存在記錄庫(Record Store)中,在記錄庫中的每一條數(shù)據(jù)也被稱為記錄(Record)。 記錄庫其實就是一個記錄的集合,在RMS中,記錄數(shù)據(jù)只是一個簡單的字節(jié)數(shù)組(byte)。 如果把一個記錄庫當(dāng)成數(shù)據(jù)庫表,那么該表只有兩個字

2、段:一個整數(shù)類型的記錄ID和一個字節(jié)數(shù)組表示的記錄數(shù)據(jù)。,記錄庫和記錄,記錄庫(Record Store),RMS系統(tǒng)的核心就是記錄庫 在一個MIDlet Suite的RMS空間中,可以有多個記錄庫,這些記錄庫的名稱必須是唯一的。 記錄庫的名稱最長為32個字符(Unicode字符),而且是大小寫敏感的。 在不同的MIDlet Suite中,可以有重名的記錄庫,RMS使用記錄庫的全名來區(qū)分這些記錄庫。 一個記錄庫全名的由3個部分組成:“MIDlet Suite名 + 供貨商名 + 記錄庫名”。 MIDlet Suite的全名是由MIDlet Suite名、供貨商名和版本號三個屬性組成的唯一名稱,

3、訪問記錄庫,不管記錄是如何存儲在MIDP設(shè)備之上的,都不允許MIDlet直接訪問,MIDP應(yīng)用必需通過RMS API才能訪問RMS,記錄庫屬性,記錄庫屬性包括: 名稱 時間戳 版本號 下一條記錄位置等 實現(xiàn)數(shù)據(jù)同步,記錄(Record),記錄是記錄庫中的數(shù)據(jù)。 記錄庫中的每條記錄都有一個唯一的整數(shù)標(biāo)識,稱為記錄ID(recordId),記錄庫中的第一條記錄的記錄ID值為1。 在每次向記錄庫中添加記錄時,記錄ID會依次遞增。 每條記錄的數(shù)據(jù)都是簡單的字節(jié)數(shù)組,由記錄ID唯一標(biāo)識。 每個記錄庫中可以存在任意數(shù)量的記錄,每個記錄中的字節(jié)數(shù)組大小(字節(jié)數(shù))也是可變的。 當(dāng)記錄庫中的一條記錄被刪除后,原

4、來的記錄ID值不允許再次使用,記錄庫操作,在MIDP中,所有RMS相關(guān)的類都位于javax.microediton.rms包中 只提供RecordStore類來保存和訪問MIDP設(shè)備上的數(shù)據(jù) 創(chuàng)建記錄庫、增加記錄、刪除記錄、更新記錄、獲取記錄庫狀態(tài),創(chuàng)建和打開記錄庫,使用RecordStore類提供的openRecordStore()方法才能創(chuàng)建或打開記錄庫,三種使用格式 打開或創(chuàng)建指定名字的記錄庫 public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary) 用于打開或

5、創(chuàng)建可以和其他MIDlet Suite共享的記錄庫 public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, intauthmode, booleanwritable) 打開已經(jīng)存在的、屬于其它MIDlet Suite的記錄庫 public static RecordStore openRecordStore( StringrecordStoreName, StringvendorName, StringsuiteName),關(guān)閉記錄庫,在使用完記錄庫之后,必須關(guān)閉記

6、錄庫以釋放系統(tǒng)資源 RecordStore類方法 public void closeRecordStore() 需要注意的是,只有在調(diào)用closeRecordStore()方法的次數(shù)和調(diào)用openRecordStore()方法的次數(shù)相等,該記錄庫才會真正被關(guān)閉。也就是說,只要還有MIDlet在使用該記錄庫,記錄庫就不會被關(guān)閉。 如果一個MIDlet關(guān)閉了記錄庫之后還試圖執(zhí)行記錄庫操作(包括關(guān)閉記錄庫),就會產(chǎn)生RecordStoreNotOpenException異常,刪除記錄庫,RecordStore類的方法 public static void deleteRecordStore(Stri

7、ngrecordStoreName) MIDlet Suite只允許刪除自己的記錄庫。 在刪除記錄庫前,該記錄庫必須為關(guān)閉狀態(tài),否則會產(chǎn)生RecordStoreException異常。 如果記錄庫不存在,則會發(fā)生RecordStoreNotFoundException異常,2020年8月2日,13,記錄庫屬性操作,改變訪問模式 public void setMode(intauthmode, booleanwritable) 獲取記錄庫列表 public static String listRecordStores() 獲取記錄庫屬性 public long getLastModified()

8、 public String getName() public int getNextRecordID() public int getNumRecords() public int getSize() public int getSizeAvailable() public int getVersion(),2020年8月2日,14,記錄庫操作實例,記錄庫操作工具類:RecordStoreUtil.java 記錄庫屬性操作:TestRecordStore.java,記錄操作,將記錄數(shù)據(jù)存儲到記錄庫中、獲取、修改和刪除記錄庫中的記錄 增加記錄 獲取記錄 修改記錄 刪除記錄 記錄操作實例,增加記

9、錄,RecordStore類中方法: public int addRecord(bytedata, intoffset, intnumBytes) 在記錄庫中增加一條新的紀(jì)錄 只提供寫入字節(jié)數(shù)組(byte)的方法,其他類型的數(shù)據(jù)需將其轉(zhuǎn)換為字節(jié)數(shù)組才能寫入記錄庫中,2020年8月2日,17,獲取記錄,RecordStore類中有兩種方式來獲取記錄。 方式1:直接獲取記錄數(shù)據(jù): public byte getRecord(intrecordId) 方式2:獲取記錄數(shù)據(jù),并將記錄數(shù)據(jù)復(fù)制到指定緩沖區(qū)的指定位置: public int getRecord(intrecordId, bytebuffe

10、r, intoffset) 返回的數(shù)據(jù)是記錄庫中數(shù)據(jù)的副本 對此數(shù)據(jù)的修改,并不會影響記錄庫中的數(shù)據(jù),2020年8月2日,18,修改記錄,RecordStore類中方法 public void setRecord(intrecordId, bytenewData, intoffset, intnumBytes) 在該方法運行后,調(diào)用getRecord(int recordId)方法就會返回一個numBytes大小的字節(jié)數(shù)組的記錄數(shù)據(jù)。,2020年8月2日,19,刪除記錄,RecordStore類中刪除指定記錄的方法 public void deleteRecord(intrecordId) 參

11、數(shù)recordId指定被刪除記錄的ID。該記錄ID不再被重新使用。,2020年8月2日,20,記錄操作實例,由于記錄庫中只保存字節(jié)數(shù)組數(shù)據(jù),其他任何類型的數(shù)據(jù)都需要轉(zhuǎn)換為字節(jié)數(shù)組才能保存,同時,從記錄庫中讀取的數(shù)據(jù)也是字節(jié)數(shù)組,也需要作相應(yīng)轉(zhuǎn)換才能恢復(fù)成所需要的數(shù)據(jù)類型。 記錄庫操作工具類:RecordStoreUtil.java 記錄操作:TestRecord.java,復(fù)合數(shù)據(jù)的處理,在實際應(yīng)用中,一條有實際含義的記錄數(shù)據(jù)可能包含有多個不同類型的數(shù)據(jù)。 例如,一個通訊錄的紀(jì)錄可能包含有如下的字段:姓名、性別、年齡、聯(lián)系電話、電子郵件等,以Java類來描述:AddressList.java

12、使用預(yù)定義的java.io包中的ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream和DataInputStream類可以實現(xiàn)字節(jié)數(shù)組的轉(zhuǎn)換:AddressList.java 通訊錄記錄的操作實例:TestAddressListRecord.java,2020年8月2日,22,監(jiān)視記錄庫,一個記錄庫可以被同一個MIDlet Suite中的所有MIDlet來訪問。當(dāng)記錄庫中的數(shù)據(jù)發(fā)生改變(如增加、修改和刪除紀(jì)錄)時,在RMS中,提供記錄庫事件處理接口RecordListener來監(jiān)視記錄庫的變化。 在同一個MIDlet suite

13、中,任何實現(xiàn)了RecordListener接口的對象都可以注冊到記錄庫的實例,監(jiān)聽該記錄庫的數(shù)據(jù)改變事件。,監(jiān)視記錄庫,RecordListener接口,RecordListener接口定義了如下的三個方法: public void recordAdded(RecordStore recordStore, int recordId) 當(dāng)記錄庫中新增記錄時自動調(diào)用。傳遞的參數(shù)分別為對應(yīng)的記錄庫和新增的記錄的ID。 public void recordChanged(RecordStore recordStore, int recordId) 記錄庫中記錄被修改時自動調(diào)用。傳遞的參數(shù)分別為對應(yīng)的記

14、錄庫和被修改的記錄的ID。 public void recordDeleted(RecordStore recordStore, int recordId) 記錄庫中記錄被刪除時自動調(diào)用。傳遞的參數(shù)分別為對應(yīng)的記錄庫和被刪除的記錄的ID。 簡單的記錄庫監(jiān)聽器:SimpleListener.java,2020年8月2日,25,注冊記錄庫監(jiān)聽器,RecordStore類用于注冊監(jiān)聽對象方法: public void addRecordListener(RecordListenerlistener) RecordStore用于刪除監(jiān)聽對象的注冊方法 public void removeRecordL

15、istener(RecordListenerlistener) 典型的注冊監(jiān)聽器的代碼: /打開記錄庫 RecordStore anRMS = RecordStore.openRecordStore(TestRMS , true); /該記錄庫注冊監(jiān)聽器,這里為例4-10定義的TestListener類的實例 anRMS.addRecordListener(new TestListener();,2020年8月2日,26,監(jiān)視記錄庫變化實例,監(jiān)視記錄庫的增加、刪除、修改操作,并將監(jiān)視結(jié)果顯示出來 記錄庫監(jiān)聽器:TestListener.java 監(jiān)視記錄庫改變:TestRMSMonitor.j

16、ava,2020年8月2日,27,記錄的查詢與排序,為了實現(xiàn)對記錄庫中記錄的查詢和排序操作,需要使用RMS的相關(guān)接口來實現(xiàn)記錄的比較、記錄的過濾和記錄的遍歷。,記錄的比較,在RMS中,提供了一個用于比較記錄庫中記錄的接口:RecordComparator接口 實現(xiàn)RecordComparator接口需要實現(xiàn)一個compare()方法: public int compare(byterec1, byterec2) 字符串紀(jì)錄的比較器類:TestComparator.java 字符串紀(jì)錄的比較:TestRecordComparator.java,2020年8月2日,29,記錄的過濾,在RMS中提供

17、一個記錄過濾接口RecordFilter 實現(xiàn)RecordFilter接口需要實現(xiàn)方法: public boolean matches(bytecandidate) 紀(jì)錄過濾器類:TestFilter.java 使用紀(jì)錄過濾器類:TestRecordFilter.java,2020年8月2日,30,記錄的遍歷,不管新增、修改或刪除記錄庫的記錄,都會涉及到記錄ID。 由于記錄ID是在記錄寫入記錄庫時就固定的,在記錄被刪除后,該ID不會被后來寫入的記錄所占用,因此不能保證所有的記錄ID目前還在記錄庫中。 RMS提供RecordEnumeration接口來實現(xiàn)記錄庫中記錄的遍歷 nextRecord

18、()、previousRecord() nextRecordId() 、previousRecordId() hasNextElement()、 hasPreviousElement() 、numRecords() rebuild()、 reset()、 destroy(),2020年8月2日,31,獲取記錄遍歷集合,通過調(diào)用RecordStore類中定義的enumerateRecords()方法,任何記錄庫實例都可以獲得記錄遍歷集合(Record Enumeration) public RecordEnumeration enumerateRecords(RecordFilterfilter, RecordComparatorcomparator, booleankeepUpdated) filter指定記錄過濾器;comparator指定比較器,用于對返回的記錄集按內(nèi)容排序后放置于當(dāng)前遍歷集合中;參數(shù)keepUpdated為true時,當(dāng)前遍歷集合將與記錄庫中的記錄同步

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論