【教学课件】第5章记录存储系统.ppt
《【教学课件】第5章记录存储系统.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第5章记录存储系统.ppt(56页珍藏版)》请在三一办公上搜索。
1、第5章记录存储系统,主讲教师:贾震斌,本章教学目标,理解记录存储系统的作用和功能;掌握记录存储系统创建、打开、关闭操作方法;掌握在记录存储系统中增加、获取、删除和修改记录的操作方法;掌握记录存储系统的记录枚举接口、记录过滤接口、记录比较接口、记录监听接口的功能和常用方法掌握“备忘录实例”编程、调试及运行。,本章学习建议,从理解引进记录存储系统的原因,掌握记录存储系统功能和方法;学习中注意比较与掌握记录存储系统中与之对应的概念,比如数据库中存在着数据库、数据表、记录、字段的概念,与记录存储系统中相应概念的区别联系;本章的难点是理解记录存储系统中记录枚举接口、记录过滤接口、记录比较接口、记录监听接
2、口的功能和常用方法的使用。随着学习内容的深入,应该更加重视综合实例的分析、编程、调试和运行,以便更好地理解学习内容。,本章目录,5.1 记录存储系统概述5.2 记录存储系统基本操作5.3 记录存储系统高级操作5.4 备忘录实例习题,5.1 记录存储系统概述,为了增加程序的灵活性,有必要将程序中数据和程序分开,从而实现改变数据不必修改程序的要求,进而实现对数据的管理(包括数据的增加、修改、插入、删除、查找等处理)功能,将就产生了对数据库的需要,本章介绍的记录存储系统,本质上是J2ME的“数据库”。对于J2ME的MIDP设备来说,所谓记录存储系统是一种存储机制,以便退出系统后仍然可以让数据永久保存
3、;每个记录存储都有一个名字,在MIDlet中是通过记录存储名来访问存储数据,因此在同一个MIDlet中记录存储名不能重复,当删除一个MIDlet时,与其相关的记录存储也会删除;记录存储机制是由类实现的。,5.2 记录存储系统基本操作,5.2.1 创建、打开记录存储5.2.2 增加记录5.2.3 获取记录5.2.4 删除记录5.2.5 修改记录,5.2.1 创建、打开记录存储,创建和打开记录存储采用相同的静态方法:public satic RecordStore openRecordStore(String name,boolean nece)public satic RecordStore o
4、penRecordStore(String name,boolean nece,int mode,boolean writable)public satic RecordStore openRecordStore(String name,String vendor,String suiteName)参数说明:String name:记录存储系统名字boolean nece:值为true时当记录存储系统不存在时创建它,否则不创建,报告异常int mode:记录存储系统权限,其值为AUTHMODE_PRIVATE时表示私有,即只有创建该记录存储系统的MIDlet Suite程序才可以访问它;其值为
5、AUTHMODE_ANY时表示允许其他MIDlet Suite程序访问它。如果不明确设置mode,默认为AUTHMODE_PRIVATEboolean writable:只有在创建记录存储系统时有效,表示是否赋予其他MIDlet Suite程序可写访问权限String vendor:表示拥有该记录存储系统的MIDlet Suite程序发布者String suiteName:MIDlet Suite程序名字,创建一个记录存储系统的语句,RecordStore rs=RecordStore.openRecordStore(“telSys”,true);创建了一个名为“telSys”的记录存储系统,
6、如果该系统不存在则创建个新的记录存储系统,关闭记录存储系统的方法,Void closeRecordStore()如果记录存储系统中有多个记录存储被打开,只有当所有记录都被关闭后,才会最终关闭整个记录存储系统,删除记录存储系统的方法,static void deleteRecordStore(String recordname)String recordname:记录存储系统名注意:删除记录存储系统和后面将介绍删除存储记录这两个概念的区别。,获得记录存储系统中记录总数的方法,int getNumRecords()注意:这个方法属于RecordStore 对象,取得的是整个记录存储系统记录总数,与
7、后面RecordEnumeration对象的获取记录数方法不同:(1)两个方法所属对象不同;(2)RecordStore 对象中的方法统计的是整个记录存储系统中的记录数,RecordEnumeration对象中的方法统计是本对象中的记录数,通常小于或等于整个记录存储系统中的记录数。,5.2.2 增加记录,记录存储系统和存储记录是两个不同概念,但两者又是紧密联系的。记录存储系统包含着一条条存储记录,两者的关系如同数据库与数据记录的关系。每条存储记录都是有一个唯一的ID号,首条记录ID号默认值是1,其后添加的记录ID 号随着记录数的增加而自动增长。即使其中一条记录被删除了,也不会影响其增加的下一条
8、记录的ID号。,增加记录的方法,public int addRecord(byte data,int offset,int numBytes)byte data:添加的记录内容 int offset:添加记录在数组里的起始下标int numBytes:添加记录的字节数添加成功后返回的记录ID号注意:从这个方法的第1个参数可以看出添加的记录类型必须是byte,但在实际应用中需要添加的记录类型是多种多样,如字符、字符串、整数、浮点数、逻辑数等,这就要求在使用添加记录方法addRecord()前首先将其他数据类型转换为byte型数据,然后才能使用这个方法。,将数据转换为字节型的类,DataOutpu
9、tStream、ByteArrayOutputStream这两个类配合可以完成将数据转换为字节型数据的工作,方法如下:/首先创建一个ByteArrayOutputStream 对象,这个对象可以将得到的数据转换化字节数组型数据输出ByteArrayOutputStream bs=new ByteArrayOutputStream();/将ByteArrayOutputStream 对象作为参数,创建与这个对象关联的DataOutputStream 对象,DataOutputStream 对象提供了将各种基本JAVA数据类型转换为数据输出流的方法DataOutputStream ds=new D
10、ataOutputStream(bs);/调用DataOutputStream 对象的方法writeInt()将int型 数据转换为数据输出流,以便传递给ByteArrayOutputStream 对象;ds.writeInt();ds.close();/将ByteArrayOutputStream 对象中的字节数组数据取出存入字节数组 b中byte b=bs.toByteArray();注:关于DataOutputStream、ByteArrayOutputStream这两个类的说明可以参考WTK Documentation。,5.2.3 获取记录,获取记录存储系统中记录的方法:byte g
11、etRecord(int recordID)int recordID:记录号注意:记录存储系统中存储的数据只能是字节数组类型byte,但在实际应用中需要的记录类型同样是多种多样,这就要求将从记录存储系统取得的数据转换成实际需要的数据类型,如字符、字符串、整数、浮点数、逻辑数等,DataOutputStream、ByteArrayInputStream这两个类配合可以完成这个工作,关于这两个类的说明可以参考WTK Documentation。,例程,/从记录存储系统中取得字节数组型数据存入b中byte b=rs.getRecord(id);/创建与b关联的ByteArrayInputStream
12、 型对象baisByteArrayInputStream bais=new ByteArrayInputStream(b);/建立与bais关联的DataInputStream 对象disDataInputStream dis=new DataInputStream(bais);/调用DataInputStream 对象的 readUTF()将得到的数据转换成UTF格式字符串;dis.readUTF();/dis.readInt();将得到的数据转换成int型数据dis.close();,UTF-8,补充内容:UTF(Universal Transformation Format)是UNICO
13、DE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。,5.2.4 删除记录,删除记录的方法:void deleteRecord(int recordID)int recordID:记录号,5.2.5 修改记录,修改记录的方法:setRecord(intrecordId,byte data,intoffset,intnumBytes)intrecor
14、dId:被替换数据的记录号byte data:用来替换记录的数据数组intoffset:将要替换记录数据在数组中的位置intnumBytes:要替换的数据的字节数,修改记录例程,ByteArrayOutputStream baos=new ByteArrayOutputStream();DataOutputStream dos=new DataOutputStream(baos);dos.writeString(string);dos.close();byte b=baos.toByteArray();rs.setRecord(id,b,0,b.length);,5.3 记录存储系统高级操作,
15、5.3.1 记录枚举接口5.3.2 记录过滤接口5.3.3 记录比较接口5.3.4 记录监听接口,5.3.1 记录枚举接口,记录枚举接口对象(RecordEnumeration)可以从记录存储系统中取得符合条件的多个记录,并在这些记录中前后浏览,以便对某条记录操作。RecordStore 的enumerateRecords 方法可以创建RecordEnumeration 对象。RecordEnumeration enumerateRecords(RecordFilter filter,RecordComparator comparator,Boolean updat)filter(过滤器)参数
16、:设置需要查找记录的过滤条件comparator(比较器)参数:设置记录排序updat参数:可以设置当记录存储内容发生变化时 RecordEnumeration 对象取得的记录是否随着变化这个对象的功能比用RecordStore对象的getRecord()方法获取记录功能更为强大,RecordEnumeration 对象的方法,void rebuild():重新创建对象以便更新数据int nextRecordId():获得下一条记录号byte nextRecord():获得下一条记录数据int previousRecordId():获得前一条记录号byte previousRecord():获
17、得前一天记录数据void reset():将对象索引恢复到刚创建时状态boolean hasNextElement():判断是否还有下一条记录boolean hasPreviousElement():判断是否还有前一条记录int numRecords():返回对象中记录总数(注意与RecordStore获取记录总数方法的区别),RecordEnumeration 对象读取数据方法,RecordEnumeration re=rs.enumerateRecords();while(true)if(re.hasNextElement()=false)break;int id=re.getRecord
18、ID();byte b=rs.getRecord(id);,5.3.2 记录过滤接口,RecordStore 对象的enumerateRecords 方法中的过滤器参数类型本身也是一种接口对象,即记录过滤接口对象RecordFilter,这个接口可以用来过滤出符合条件的数据记录,接口提供了抽象方法用来实现过滤方法:public boolean matches(bytecandidate)matches()方法的参数,记录过滤接口实现方法,下面程序中matches()方法的参数为记录存储系统中某条记录的数据,希望与该数据相匹配的记录被选中时,就让matches()方法返回true,否则返回fal
19、se。class MyFilter implements RecordFilterpublic boolean matches(bytecandidate)ByteArrayInputStream bais=new ByteArrayInputStream(b);DataInputStream dis=new DataInputStream(bais);dis.readUTF();return true;,5.3.3 记录比较接口,与记录过滤接口类似,前面介绍的RecordStore 对象的enumerateRecords 方法中的比较器参数的类型本身也是一种接口对象,即记录比较接口对象Rec
20、ordComparator,可以用来对数据记录排序进行比较,这个对象提供了抽象方法用来实现记录比较接口方法:int compare(byte data1,byte data2)byte data1,byte data2:两条记录该方法返回值有3种:RecordComparator.EQUIVALENT:表示两条记录没有顺序RecordComparator.FOLLOWS:表示data1在data2之后RecordComparator.PRECEDES:表示data1在data2之前,记录比较接口实现方法,class MyFilter implements RecordComparatorpub
21、lic int compare(byte d1,byte d2)ByteArrayInputStream bs1=new ByteArrayInputStream(d1);DataInputStream ds1=new DataInputStream(bs1);String s1=ds1.readUTF();ByteArrayInputStream bs2=new ByteArrayInputStream(d2);DataInputStream ds2=new DataInputStream(bs2);String s2=ds2.readUTF();if(pareTo(s2)=0)return
22、 RecordComparator.EQUIVALENT;if(pareTo(s2)0)return RecordComparator.FOLLOWS;if(pareTo(s2)0)return RecordComparator.PRECEDES;,5.3.4 记录监听接口,MIDP提供了对记录数据的变化进行监听的接口RecordListener,用于监听记录数据增加、删除和改变事件的发生,与此对应的事件处理过程抽象方法是:void recordAdded(RecordStore recordStore,int recordId):Called when a record has been a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 记录 存储系统
链接地址:https://www.31ppt.com/p-5659059.html