第06章数据存储PPT讲稿.ppt

上传人:石*** 文档编号:43304661 上传时间:2022-09-17 格式:PPT 页数:20 大小:984KB
返回 下载 相关 举报
第06章数据存储PPT讲稿.ppt_第1页
第1页 / 共20页
第06章数据存储PPT讲稿.ppt_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《第06章数据存储PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第06章数据存储PPT讲稿.ppt(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第06章数据存储第1页,共20页,编辑于2022年,星期日目标n理解RMS的体系结构n熟悉记录存储的管理方法n掌握记录的增、删、改等基本操作第2页,共20页,编辑于2022年,星期日记录管理系统记录管理系统概述记录管理系统概述几乎所有的游戏都需要在运行过程中保存信息,类似:玩家输入的数据,例如玩家的姓名;游戏的进程数据,例如关数、分数等;经常需要使用的工具,例如常用的URL链接等。在MIDP规范中,提供了记录管理系统(RecordManagementSystem,RMS),这个记录管理系统就是一个小型简单的数据库管理系统(DatabaseManagementSystem),除了能用于管理系统储

2、存资料之外,也可以用于存储对象的状态信息。记录仓库的根本作用就是提供给开发人员以存储信息、提取信息的功能。MIDP规范要求所有的实现提供持久存储机制,以保证当设备关闭的时候,相关的信息能够进行保存。实际上,这种存储机制在不同的设备上并不一致,但是对于MIDlet来讲,其应用接口是一致的,这使得MIDlet不需要考虑在设备之间的差异性。第3页,共20页,编辑于2022年,星期日记录管理系统是一个小型的数据库,存在很多记录仓库(RecordStore)。在记录仓库中的存在一条一条的资料,也称为记录。它们之间的关系:记录管理系统记录管理系统概述记录管理系统概述第4页,共20页,编辑于2022年,星期

3、日所有和记录管理系统相关的类别都属于javax.microedition.rms,其中共包含以下类:1.一个类:RecordStore2.四个接口:RecordComparator,RecordFilter,RecordListener,RecordEnumeration3.五种异常:InvalidRecordException,RecordStoreException,RecordStoreFullException,RecordStoreNotFoundException,RecordStoreNotOpenException 记录管理系统记录管理系统概述记录管理系统概述第5页,共20页,

4、编辑于2022年,星期日记录仓库管理记录仓库管理 记录仓库(RecordStore)是记录的集合,在每一个MIDletSuite之中,每一个资料仓库都有它独一无二每一个资料仓库都有它独一无二的名字,长度不能超过的名字,长度不能超过32个个Unicode 字符,并且区分大小写字符,并且区分大小写。同一个MIDletSuite之中的MIDlet都可以共享这些RecordStore,而不同MIDletSuite之间无法共享记录仓库。MIDlet不能够访问诸如地址簿之类的数据,非Java的程序也不能够访问MIDlet的数据。记录管理系统第6页,共20页,编辑于2022年,星期日打开记录仓库使用Reco

5、rdStore类的openRecordStore()方法:openRecordStore(Stringname,booleancreate)第一个参数是RecordStore的名称,第二个参数如果传入的是true,代表如果我们所要开启的资料仓库不存在,请系统帮我们建立一个新的RecordStore;反之,如果传入的是false,代表如果我们所要开启的RecordStore不存在,就抛出RecordStoreNotFoundException异常。openRecordStore(StringrecordStoreName,booleancreateIfNecessary,intauthmode,

6、booleanwritable)前两个参数同上,第三个参数是创建方式(PRIVATE/ANY)是否可以被其他套件访问。第四个参数,其他套件是否可以进行写操作。记录管理系统记录仓库管理记录仓库管理 第7页,共20页,编辑于2022年,星期日关闭记录仓库当MIDlet不再使用RecordStore的时候,应当使用closeRecordStore()函数关闭RecordStore。如果有多个MIDlet打开了同一个RecordStore,这个RecordStore直到所有的MIDlet执行了关闭操作才会被真正关闭。/两次打开同一个RecordStoreRecordStorescores=Record

7、Store.openRecordStore(Scores,true);RecordStorescores2=RecordStore.openRecordStore(Scores,true);/关闭RecordStore,第一次并不会真正关闭scores.closeRecordStore();/真正关闭RecordStorescores2.closeRecordStore();记录管理系统记录仓库管理记录仓库管理 第8页,共20页,编辑于2022年,星期日删除记录仓库可以使用静态函数deleteRecordStore()删除RecordStore对象:publicstaticvoiddelete

8、RecordStore(Stringname)如果该RecordStore还在被某个MIDlet使用,那么删除的操作会引起RecordStoreException异常。如果该名字的RecordStore并不存在,该操作会引起RecordStoreNotFoundException异常。只有被关闭的RecordStore对象才能够被删除,假如对应的MIDletSuite进行了卸载,那么对应的RecordStore会自动被删除。记录管理系统记录仓库管理记录仓库管理 第9页,共20页,编辑于2022年,星期日列出记录仓库MIDlet可以使用listRecordStores函数获得该MIDletSui

9、te所拥有的所以RecordStore的名称publicstaticStringlistRecordStores()如果MIDletSuite没有RecordStore存在,则返回一个空的数组。思考:写一个方法,来判断一个指定名字的RecordStore是否存在记录管理系统记录仓库管理记录仓库管理 第10页,共20页,编辑于2022年,星期日使用记录仓库的方法已经打开的RecordStore的相关方法:publicStringgetName()返回RecordStore的名字getLastModified()返回上次修改的时间。从1970.1.1零时至此的微秒值。与SystemcurrentT

10、imeMillis()返回值相同。publicintgetVersion()返回一个整数值,表示该数据被操作的次数,例如增加,删除,修改等操作都会被记录publicintgetSize()返回RecordStore占用的字节数目publicintgetSizeAvailable()返回该RecordStore允许增长的最大占用空间,该空间包括管理数据自身需要的空间。记录管理系统记录仓库管理记录仓库管理 第11页,共20页,编辑于2022年,星期日记录的基本操作记录的基本操作IDRecordStore包含多个record,每一个record都有一个独一无二的ID值。该ID值不属于record自身

11、,而是在record创建时候进行分配。分配ID的有以下的原则:分配给第一个第一个record的的ID是是1,新记录分配的ID值比原有记录ID值大记录管理系统添加记录添加记录(addRecord)intaddRecord(bytedata,intoffset,intnumBytes)将bytes数组存放到RecordStore之中,并传回其RecordID。记录的数据从data字节流中获得,第一个字节是dataoffset,最后一个字节是dataoffset+size-1,可以使用DataOutputStream以及ByteArrayOutputStream共同将对象值转变称为正确的字节流。第1

12、2页,共20页,编辑于2022年,星期日以下是一个表示游戏中用户分数的对象,现在需要将该对象作为一个record进行保存。对象定义如下:publicclassScoreRecordpublicStringplayerName;/名称publicintscore;/分数记录管理系统记录的基本操作记录的基本操作第13页,共20页,编辑于2022年,星期日以下是转换的过程:/创建对象ScoreRecordrecord=newScoreRecord();record.playerName=TopNotch;record.score=12345678;/创建输出流ByteArrayOutputStrea

13、mbaos=newByteArrayOutputStream();DataOutputStreamos=newDataOutputStream(baos);/将对象值保存到输出流中os.writeUTF(record.playerName);os.writeInt(record.score);os.close();记录管理系统记录的基本操作记录的基本操作第14页,共20页,编辑于2022年,星期日增加记录/获得字节流bytedata=baos.toByteArray();/将记录写到recordstore中intid=recordStore.addRecord(data,0,data.leng

14、th);记录管理系统记录的基本操作记录的基本操作第15页,共20页,编辑于2022年,星期日 获取记录(获取记录(getRecord)bytegetRecord(intrecordid)取出特定RecordID的那笔数据。同样这也是针对byte数组的操作,因此也需要利用DataInputStream以及ByteArrayInputStream简化从Java类型到字节集合的转换工作。intgetRecord(intrecordid,bytedata,intoffset)表示将取出的值置于dataoffset开始的位置。记录的基本操作记录的基本操作记录管理系统bytedata=recordStor

15、e.getRecord(recordId);DataInputStreamis=newDataInputStream(newByteArrayInputStream(data);ScoreRecordrecord=newScoreRecord();record.playerName=is.readUTF();record.score=is.readInt();is.close();第16页,共20页,编辑于2022年,星期日getRecordbytegetRecord(intrecordid)取出特定RecordID的那笔数据。同样这也是针对byte数组的操作,因此也需要利用DataInput

16、Stream以及ByteArrayInputStream简化从Java类型到字节集合的转换工作。记录管理系统记录的基本操作记录的基本操作第17页,共20页,编辑于2022年,星期日修改记录(修改记录(setRecordsetRecord)public void setRecord(int recordId,byte data,int offset,int size);利用该函数可以修改记录值。修改记录的过程其实相当于读写两个步骤的结合。记录管理系统/修改记录record.score+=10;ByteArrayOutputStreambaos=newByteArrayOutputStream()

17、;DataOutputStreamos=newDataOutputStream(baos);os.writeUTF(record.playerName);os.writeInt(record.score);os.close();bytedata=baos.toByteArray();/将记录写入recordstore,覆盖原有记录recordStore.setRecord(recordId,data,0,data.length);记录的基本操作记录的基本操作第18页,共20页,编辑于2022年,星期日删除记录(删除记录(deleteRecorddeleteRecord)voiddeleteRecord(intrecordid)删除特定RecordID的记录。当指定ID记录被删除,其对应的ID号不会被重用。记录管理系统记录的基本操作记录的基本操作第19页,共20页,编辑于2022年,星期日nRecordStore的创建,查询,删除n记录的增删改n记录的排序总结第20页,共20页,编辑于2022年,星期日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com