版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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)。 如果把一個記錄庫當成數(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應用必需通過RMS API才能訪問RMS,記錄庫屬性,記錄庫屬性包括: 名稱 時間戳 版本號 下一條記錄位置等 實現(xiàn)數(shù)據(jù)同步,記錄(Record),記錄是記錄庫中的數(shù)據(jù)。 記錄庫中的每條記錄都有一個唯一的整數(shù)標識,稱為記錄ID(recordId),記錄庫中的第一條記錄的記錄ID值為1。 在每次向記錄庫中添加記錄時,記錄ID會依次遞增。 每條記錄的數(shù)據(jù)都是簡單的字節(jié)數(shù)組,由記錄ID唯一標識。 每個記錄庫中可以存在任意數(shù)量的記錄,每個記錄中的字節(jié)數(shù)組大?。ㄗ止?jié)數(shù))也是可變的。 當記錄庫中的一條記錄被刪除后,原
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) 在記錄庫中增加一條新的紀錄 只提供寫入字節(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ù)復制到指定緩沖區(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ù)組,也需要作相應轉(zhuǎn)換才能恢復成所需要的數(shù)據(jù)類型。 記錄庫操作工具類:RecordStoreUtil.java 記錄操作:TestRecord.java,復合數(shù)據(jù)的處理,在實際應用中,一條有實際含義的記錄數(shù)據(jù)可能包含有多個不同類型的數(shù)據(jù)。 例如,一個通訊錄的紀錄可能包含有如下的字段:姓名、性別、年齡、聯(lián)系電話、電子郵件等,以Java類來描述:AddressList.java
12、使用預定義的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來訪問。當記錄庫中的數(shù)據(jù)發(fā)生改變(如增加、修改和刪除紀錄)時,在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) 當記錄庫中新增記錄時自動調(diào)用。傳遞的參數(shù)分別為對應的記錄庫和新增的記錄的ID。 public void recordChanged(RecordStore recordStore, int recordId) 記錄庫中記錄被修改時自動調(diào)用。傳遞的參數(shù)分別為對應的記
14、錄庫和被修改的記錄的ID。 public void recordDeleted(RecordStore recordStore, int recordId) 記錄庫中記錄被刪除時自動調(diào)用。傳遞的參數(shù)分別為對應的記錄庫和被刪除的記錄的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) 字符串紀錄的比較器類:TestComparator.java 字符串紀錄的比較:TestRecordComparator.java,2020年8月2日,29,記錄的過濾,在RMS中提供
17、一個記錄過濾接口RecordFilter 實現(xiàn)RecordFilter接口需要實現(xiàn)方法: public boolean matches(bytecandidate) 紀錄過濾器類:TestFilter.java 使用紀錄過濾器類: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)容排序后放置于當前遍歷集合中;參數(shù)keepUpdated為true時,當前遍歷集合將與記錄庫中的記錄同步
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 7956.24-2025消防車第24部分:自裝卸式消防車
- 2025年大學公共事業(yè)管理(公共組織學)試題及答案
- 2025年大學??疲ㄊ突ぜ夹g(shù))油品分析試題及答案
- 2025年大學大二(環(huán)境工程)專業(yè)分流選拔測試卷
- 2025年高職物業(yè)管理(物業(yè)管理基礎(chǔ))試題及答案
- 2025年中職冶金技術(shù)(冶金操作實操)試題及答案
- 2025年中職歷史學(世界古代史)試題及答案
- 2025年大學大一(材料科學)金屬材料學階段測試題及答案
- 2025年高職環(huán)境工程技術(shù)(環(huán)保設(shè)備運行與維護)試題及答案
- 2026年注冊消防工程師(一級消防安全技術(shù)實務)試題及答案
- 化工有限公司老舊裝置改建年產(chǎn)600噸金屬萃取劑項目環(huán)評資料環(huán)境影響
- 科學探究課件模板
- 交通運輸行業(yè)安全生產(chǎn)規(guī)章制度
- 期末 (試題) -2024-2025學年外研版(三起)(2024)英語三年級上冊
- GB/T 44373-2024智能網(wǎng)聯(lián)汽車術(shù)語和定義
- 組織行為學考試題(附參考答案)
- 水產(chǎn)養(yǎng)殖合作協(xié)議合同
- 光伏電站-強制性條文執(zhí)行檢查表
- 經(jīng)濟學在生活中
- 產(chǎn)品防護控制程序培訓課件
- ISO-6336-5-2003正齒輪和斜齒輪載荷能力的計算-第五部分(中文)
評論
0/150
提交評論