版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、记录管理系统,陈旭东,2020年8月2日,2,内容,RMS概述 记录库操作 记录操作 监视记录库 记录的查询与排序,RMS概述,记录管理系统(Record Management System, RMS) 小型、简单数据库管理系统 可以保存简单数据 可以将对象状态经过序列化之后,保存到记录管理系统 记录管理系统存在于设备特定的存储空间,称为RMS空间,RMS,数据是保存在记录库(Record Store)中,在记录库中的每一条数据也被称为记录(Record)。 记录库其实就是一个记录的集合,在RMS中,记录数据只是一个简单的字节数组(byte)。 如果把一个记录库当成数据库表,那么该表只有两个字
2、段:一个整数类型的记录ID和一个字节数组表示的记录数据。,记录库和记录,记录库(Record Store),RMS系统的核心就是记录库 在一个MIDlet Suite的RMS空间中,可以有多个记录库,这些记录库的名称必须是唯一的。 记录库的名称最长为32个字符(Unicode字符),而且是大小写敏感的。 在不同的MIDlet Suite中,可以有重名的记录库,RMS使用记录库的全名来区分这些记录库。 一个记录库全名的由3个部分组成:“MIDlet Suite名 + 供货商名 + 记录库名”。 MIDlet Suite的全名是由MIDlet Suite名、供货商名和版本号三个属性组成的唯一名称,
3、访问记录库,不管记录是如何存储在MIDP设备之上的,都不允许MIDlet直接访问,MIDP应用必需通过RMS API才能访问RMS,记录库属性,记录库属性包括: 名称 时间戳 版本号 下一条记录位置等 实现数据同步,记录(Record),记录是记录库中的数据。 记录库中的每条记录都有一个唯一的整数标识,称为记录ID(recordId),记录库中的第一条记录的记录ID值为1。 在每次向记录库中添加记录时,记录ID会依次递增。 每条记录的数据都是简单的字节数组,由记录ID唯一标识。 每个记录库中可以存在任意数量的记录,每个记录中的字节数组大小(字节数)也是可变的。 当记录库中的一条记录被删除后,原
4、来的记录ID值不允许再次使用,记录库操作,在MIDP中,所有RMS相关的类都位于javax.microediton.rms包中 只提供RecordStore类来保存和访问MIDP设备上的数据 创建记录库、增加记录、删除记录、更新记录、获取记录库状态,创建和打开记录库,使用RecordStore类提供的openRecordStore()方法才能创建或打开记录库,三种使用格式 打开或创建指定名字的记录库 public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary) 用于打开或
5、创建可以和其他MIDlet Suite共享的记录库 public static RecordStore openRecordStore(String recordStoreName, boolean createIfNecessary, intauthmode, booleanwritable) 打开已经存在的、属于其它MIDlet Suite的记录库 public static RecordStore openRecordStore( StringrecordStoreName, StringvendorName, StringsuiteName),关闭记录库,在使用完记录库之后,必须关闭记
6、录库以释放系统资源 RecordStore类方法 public void closeRecordStore() 需要注意的是,只有在调用closeRecordStore()方法的次数和调用openRecordStore()方法的次数相等,该记录库才会真正被关闭。也就是说,只要还有MIDlet在使用该记录库,记录库就不会被关闭。 如果一个MIDlet关闭了记录库之后还试图执行记录库操作(包括关闭记录库),就会产生RecordStoreNotOpenException异常,删除记录库,RecordStore类的方法 public static void deleteRecordStore(Stri
7、ngrecordStoreName) MIDlet Suite只允许删除自己的记录库。 在删除记录库前,该记录库必须为关闭状态,否则会产生RecordStoreException异常。 如果记录库不存在,则会发生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,记录操作,将记录数据存储到记录库中、获取、修改和删除记录库中的记录 增加记录 获取记录 修改记录 删除记录 记录操作实例,增加记
9、录,RecordStore类中方法: public int addRecord(bytedata, intoffset, intnumBytes) 在记录库中增加一条新的纪录 只提供写入字节数组(byte)的方法,其他类型的数据需将其转换为字节数组才能写入记录库中,2020年8月2日,17,获取记录,RecordStore类中有两种方式来获取记录。 方式1:直接获取记录数据: public byte getRecord(intrecordId) 方式2:获取记录数据,并将记录数据复制到指定缓冲区的指定位置: public int getRecord(intrecordId, bytebuffe
10、r, intoffset) 返回的数据是记录库中数据的副本 对此数据的修改,并不会影响记录库中的数据,2020年8月2日,18,修改记录,RecordStore类中方法 public void setRecord(intrecordId, bytenewData, intoffset, intnumBytes) 在该方法运行后,调用getRecord(int recordId)方法就会返回一个numBytes大小的字节数组的记录数据。,2020年8月2日,19,删除记录,RecordStore类中删除指定记录的方法 public void deleteRecord(intrecordId) 参
11、数recordId指定被删除记录的ID。该记录ID不再被重新使用。,2020年8月2日,20,记录操作实例,由于记录库中只保存字节数组数据,其他任何类型的数据都需要转换为字节数组才能保存,同时,从记录库中读取的数据也是字节数组,也需要作相应转换才能恢复成所需要的数据类型。 记录库操作工具类:RecordStoreUtil.java 记录操作:TestRecord.java,复合数据的处理,在实际应用中,一条有实际含义的记录数据可能包含有多个不同类型的数据。 例如,一个通讯录的纪录可能包含有如下的字段:姓名、性别、年龄、联系电话、电子邮件等,以Java类来描述:AddressList.java
12、使用预定义的java.io包中的ByteArrayOutputStream、ByteArrayInputStream、DataOutputStream和DataInputStream类可以实现字节数组的转换:AddressList.java 通讯录记录的操作实例:TestAddressListRecord.java,2020年8月2日,22,监视记录库,一个记录库可以被同一个MIDlet Suite中的所有MIDlet来访问。当记录库中的数据发生改变(如增加、修改和删除纪录)时,在RMS中,提供记录库事件处理接口RecordListener来监视记录库的变化。 在同一个MIDlet suite
13、中,任何实现了RecordListener接口的对象都可以注册到记录库的实例,监听该记录库的数据改变事件。,监视记录库,RecordListener接口,RecordListener接口定义了如下的三个方法: public void recordAdded(RecordStore recordStore, int recordId) 当记录库中新增记录时自动调用。传递的参数分别为对应的记录库和新增的记录的ID。 public void recordChanged(RecordStore recordStore, int recordId) 记录库中记录被修改时自动调用。传递的参数分别为对应的记
14、录库和被修改的记录的ID。 public void recordDeleted(RecordStore recordStore, int recordId) 记录库中记录被删除时自动调用。传递的参数分别为对应的记录库和被删除的记录的ID。 简单的记录库监听器:SimpleListener.java,2020年8月2日,25,注册记录库监听器,RecordStore类用于注册监听对象方法: public void addRecordListener(RecordListenerlistener) RecordStore用于删除监听对象的注册方法 public void removeRecordL
15、istener(RecordListenerlistener) 典型的注册监听器的代码: /打开记录库 RecordStore anRMS = RecordStore.openRecordStore(TestRMS , true); /该记录库注册监听器,这里为例4-10定义的TestListener类的实例 anRMS.addRecordListener(new TestListener();,2020年8月2日,26,监视记录库变化实例,监视记录库的增加、删除、修改操作,并将监视结果显示出来 记录库监听器:TestListener.java 监视记录库改变:TestRMSMonitor.j
16、ava,2020年8月2日,27,记录的查询与排序,为了实现对记录库中记录的查询和排序操作,需要使用RMS的相关接口来实现记录的比较、记录的过滤和记录的遍历。,记录的比较,在RMS中,提供了一个用于比较记录库中记录的接口:RecordComparator接口 实现RecordComparator接口需要实现一个compare()方法: public int compare(byterec1, byterec2) 字符串纪录的比较器类:TestComparator.java 字符串纪录的比较:TestRecordComparator.java,2020年8月2日,29,记录的过滤,在RMS中提供
17、一个记录过滤接口RecordFilter 实现RecordFilter接口需要实现方法: public boolean matches(bytecandidate) 纪录过滤器类:TestFilter.java 使用纪录过滤器类:TestRecordFilter.java,2020年8月2日,30,记录的遍历,不管新增、修改或删除记录库的记录,都会涉及到记录ID。 由于记录ID是在记录写入记录库时就固定的,在记录被删除后,该ID不会被后来写入的记录所占用,因此不能保证所有的记录ID目前还在记录库中。 RMS提供RecordEnumeration接口来实现记录库中记录的遍历 nextRecord
18、()、previousRecord() nextRecordId() 、previousRecordId() hasNextElement()、 hasPreviousElement() 、numRecords() rebuild()、 reset()、 destroy(),2020年8月2日,31,获取记录遍历集合,通过调用RecordStore类中定义的enumerateRecords()方法,任何记录库实例都可以获得记录遍历集合(Record Enumeration) public RecordEnumeration enumerateRecords(RecordFilterfilter, RecordComparatorcomparator, booleankeepUpdated) filter指定记录过滤器;comparator指定比较器,用于对返回的记录集按内容排序后放置于当前遍历集合中;参数keepUpdated为true时,当前遍历集合将与记录库中的记录同步
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年虚拟电厂参与电力交易:充电运营商新利润增长点
- 土方开挖及回填专项施工方案
- 2026年电致变色窗使电动汽车续航提升10%的节能原理与商业化前景
- 福建漳州市南靖县2025-2026学年九年级上学期期末数学试题(含答案)
- RRAM的端侧存算一体推理芯片研发和应用项目可行性研究报告模板立项申批备案
- 某饮料厂数据备份准则
- 疼痛护理中的多学科合作
- 某汽车制造厂工艺规范细则
- 2025-2026学年青海省海南藏族自治州中考物理押题卷(含答案解析)
- 2025北京首师大附中高三10月月考数学试题及答案
- 醉酒客人处理培训
- 考研学前教育2025年学前教育学真题试卷(含答案)
- 高职院校学生学业规划模板
- 机械制造技术题库含参考答案
- 中央空调故障应急预案
- (2025修订版)CAAC无人机理论考试题库资料及参考答案
- 配料机pld1200YT1200c使用说明书
- 2025党校入党积极分子发展对象考试题库(含答案)
- 加味八珍益母讲解
- 电力安全安规培训课件
- 挂靠合作合同协议书范本
评论
0/150
提交评论