RMS中记录被覆盖的问题

问题描述

进入程序,创建一个RMS实例,在其中写入10条数据(对应的索引是1~10),退出程序,一切正常。再次进入程序,打开之前创建的RMS实例,写入一条数据,RMS实例中,有11条记录,但第十条和第十一条的索引都是10,造成了第十一条对第十条记录的覆盖。到现在为止,我还是没弄明白出错的原因。请各位大侠指点,谢谢!

解决方案

解决方案二:
请问你的“写入”,是修改,还是增加?如果是修改,那么可能索引被占用,或者你修改时候,错误删了一条,被删的记录位置的索引不变,但是内容是null如果是增加,你的覆盖是怎么来的??能看下你的完整代码么??
解决方案三:
不是修改,是增加,写记录的函数如下,就是在打开rms后,调用这个函数写记录。publicstaticvoidwriteRMS(Stringstr,RecordStorers){try{byte[]data=str.getBytes("UTF-8");if(null!=rs){rs.addRecord(data,0,data.length);}}catch(UnsupportedEncodingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(RecordStoreNotOpenExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(RecordStoreFullExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(RecordStoreExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}
解决方案四:
引用2楼kircheis_tree的回复:

不是修改,是增加,写记录的函数如下,就是在打开rms后,调用这个函数写记录。publicstaticvoidwriteRMS(Stringstr,RecordStorers){try{byte[]data=str.getBytes("UTF-8");if(null!=rs){rs.addRecord(data,0,data.leng……

那可能是你读取时候,出问题了,你在按照索引读取记录时,有没创建个新的字符数组?比如byte[]b=rs.getRecord(索引);//返回一个字节数组b,这个b是新的,不能是你上面的data,System.out.println(newString(b));//b要转化为String我觉得如果你没重新创建一个数组来存放你读取的数据,原来data的数组本来还是10个,你读取的索引也只能到10,而你新加进去的不会覆盖data数据。你所谓的覆盖,是数据覆盖吧?数据怎么可能覆盖呢,对象一般才会出现覆盖现象,你这里可能是数组引用对象弄错了。。。。。----PS:本人能想到的只有这么多了,呵呵,也是刚学J2ME,多多指教
解决方案五:
这个和读取没有关系,我写了这样一段测试代码:publicclassRMSextendsMIDlet{RecordStorers=null;rmsCanvascanvas=newrmsCanvas();Displaydisplay;。。。。。。publicRMS(){try{rs=RecordStore.openRecordStore("test",true);byte[]a={1,2,3,4};rs.addRecord(a,0,a.length);byte[]b={5,6,7,8};rs.addRecord(b,0,b.length);}catch(RecordStoreFullExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(RecordStoreNotFoundExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(RecordStoreExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicvoidstartApp(){display=Display.getDisplay(this);display.setCurrent(canvas);canvas.repaint();}}我用的模拟器是KE,第一次运行该程序时,在KE的rmsSonyEricssonK800_240x320.test目录下,会有两个文件:test_1.rms和test_2.rms退出后再次运行程序时,本来应该有test_1.rms,test_2.rms,test_3.rms和test_4.rms四个文件,但事实上只有test_1.rms,test_2.rms,test_3.rms三个文件根据文件内容得知,第一次运行时保存的test_2.rms被覆盖了,所以只有三个文件我看了rs的数据结构,里面有一个vector用来保存记录的索引,test_1.rms的索引是1,test_2.rms和test_3.rms的索引都是2,所以导致了覆盖现在仍然在找原因中,按说RecordStore不会把记录的索引都弄错啊。。。
解决方案六:
记录器.你每一次打开.若打开的名字相同.则打开的是同一个记录器.而不是每执行一次.记录器ID就自增.你的写法.只会将原有的覆盖.因为你根本没有判断记录器里是否存在有记录.代码是没有错.但错的是你思路上的问题.你没有弄清楚RMS的本质.
解决方案七:
操作完成后应该及时关闭rms啊你用close了么
解决方案八:
弄明白了,应该是KE模拟器的问题,因为在真机上一切正常。

时间: 2024-09-20 15:21:41

RMS中记录被覆盖的问题的相关文章

NSIS:在注册表中记录安装路径以便重装或升级时读取

原文 NSIS:在注册表中记录安装路径以便重装或升级时读取 在NSIS中,这个功能是非常有用的,可以避免用户把程序安装到多个位置的尴尬. 第1步:在"安装目录选择页面"前面加入以下代码:  1 !define MUI_PAGE_CUSTOMFUNCTION_show Pageshow 第2步:读取注册表中关于安装路径的键值,如果没有,就使用默认路径. 1 InstallDirRegKey HKCU "Software\eBook Workshop" "&q

SQL2005-深入了解SSIS中记录集的应用

sql2005|记录集 SQL2005-深入了解SSIS中记录集的应用 在本文,我将介绍如何产生记录集,并将利用记录集中的行和列干某些事情,比如当你想基于行遍历执行某项操作,这是非常有用的 产生记录集非常简单了,上文<SSIS中ExecuteSQL TASK组件>中就介绍了 好了,现在开始我们的准备工作 1.现在我们定义4个变量 ClosureDate 日期型数据 ,初始值为1/12/1999 Contactname 字符串型 emailaddress 字符串型 rsDetails 对象型 这

解决数据库中记录重复问题

解决|数据|数据库|问题|重复 解决数据库中记录重复问题 (By:aloxy) Jul 22, 11:19 --产品数据重复统计SELECT mc, userid, COUNT(mc) AS Expr1FROM chanpinGROUP BY mc, userid--将不重复的纪录插入新表newchanpinselect * into #Tmp1 from chanpingoselect min(ID) as autoID into #Tmp2 from #Tmp1 group by mc, u

看实例学VFP:对表中记录进行定位与查找操作

在VFP中操作表记录时,既可以使用sql语句,也可以使用内置的append.replace.delete/pack/zap等命令并配合一些记录指针定位和数据排序方面的命令及函数来使用,而在vb/vb.net中,使用ADO/ADO.NET的属性和方法就可以了.VFP象C语言一样灵活,但或许正是由于这一点,让许多刚接触她的人感觉无处下手并进而不喜欢她.VFP象是一位其貌不扬.性格内向的淑女,不是每个人都会喜欢她,只有了解她的优点的人才会爱上她. 话说得有点跑题了,现在言归正传.从本文开始会给出一些使

Windows在注册表中记录盘符分配的原理

windows在加载一个之前从未加载过的分区时,首先要将这个分区的设备序号信息记录在注册表里,如果对这个分区进行了盘符(或路径)分配,那么在下次加载这个分区的时候就不用再次指定盘符(或路径)了. 这些信息记录在:[HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices]键值下,内容大致为(从我的电脑里导出的):附件1 这里面重要的是这几个: "\\DosDevices\\R:"=hex:eb,f8,b2,92,00,7e,00,00,00,00,00,00 上

看实例学VFP:对数据表中记录进行修改

本例运行时表单上用于接收数据的文本框被隐藏,"修改"按钮禁用,如下图: 在组合框中选择要查找的字段,在文本框中输入查找内容后单击右侧的"查找"按钮后将查找结果显示在上方的表格中,"查找"按钮被禁用,同时激活"修改"按钮及用于接收数据的文本框,并将当前记录(满足查询条件的记录)的值同时显示在文本框中,如下图: 单击"修改"按钮后会对输入的值做判断,如果满足非空的条件,则用表单文本框中的值修改"网站信

Word文档中出现打字覆盖问题的解决方法

  Word文档中出现打字覆盖问题的解决方法          其实出现打字覆盖的根本原因是:Word进入了改写模式!有可能在无意中按下了Insert键,使得Word进入了这种模式.而只要将Word调回插入模式,就可以恢复正常了!再次按下Insert键就能达到这种效果哦!当 下图中的Word就是正常的,因为它下面的状态栏中显示出现在是"插入"模式! 方法一:快捷键 将光标定位在Word文档中,然后按下位于键盘右侧的Ins键或者Insert键即可. 方法二:状态栏 1.打开状态栏中的&q

怎么解决Word2003中的打字覆盖问题

怎么解决Word2003中的打字覆盖问题 方法一 双击Word窗口最下面的状态栏中的"改写",当其呈灰色时即为插入状态. 方法二 按下Insert键,"改写"就会变成灰色.   word教程 Excel教程 PowerPoint教程  

使用ejb往oracle数据库中插入Date型数据,数据库中记录始终是yyyy-mm-dd

问题描述 使用ejb往oracle数据库中插入Date型数据,数据库中记录始终是yyyy-mm-dd 使用ejb往oracle数据库中插入Date型数据,数据库中记录始终是yyyy-mm-dd,但是在插入前我已经转成了yyyy-mm-dd HH:mm:ss格式,插入到数据库中时分秒就掉了,怎么回事 解决方案 应该用timestamp类型吧 解决方案二: http://blog.sina.com.cn/s/blog_af4f958e01015fmx.html 解决方案三: 也许是你使用的界面工具的