当前位置: 代码迷 >> J2ME >> 报javax.microedition.rms.InvalidRecordIDException的错误。
  详细解决方案

报javax.microedition.rms.InvalidRecordIDException的错误。

热度:7850   发布时间:2013-02-25 21:33:52.0
Javame的rms的一个小问题。。。
Java code
protected void startApp() throws MIDletStateChangeException {        // TODO Auto-generated method stub        RecordStore rs=null;        try        {            rs=RecordStore.openRecordStore("数据集1", true);            System.out.print("添加一条记录:中国信息大学"+"\n");            String str1="中国信息大学";            byte[] by1=str1.getBytes();            rs.addRecord(by1, 0, by1.length);            int i=rs.getNumRecords();            System.out.println("当前记录条数:"+i);            byte[] by2=rs.getRecord(1);            String str2=new String(by2);            System.out.println("当前第一条记录是:"+str2);            System.out.println("正在执行删除操作...");            rs.deleteRecord(1);            i=rs.getNumRecords();            System.out.println("当前记录条数:"+i);                        rs.closeRecordStore();        }catch(Exception ex){            ex.printStackTrace();        }    }

javax.microedition.rms.InvalidRecordIDException的错误。但是如果把第二个i=rs.getRecords();改成int j=rs.getRecords();就没问题了。这是为什么?

------解决方案--------------------------------------------------------
找到问题了。。。是 rs.getRecord(1); 这个,尽管记录没有变,但是 id=1 的那个被你删了。所以再start的时候,recordID=1的那个早都没有了,你删的时候就出问题了。。。。。。
------解决方案--------------------------------------------------------
嗯,改了就好。。。。
***********************************
int rId = 0; //俺加的。。。
try
{
rs=RecordStore.openRecordStore("数据集1", true);
System.out.print("添加一条记录:中国信息大学"+"\n");
String str1="中国信息大学";
byte[] by1=str1.getBytes();
rs.addRecord(by1, 0, by1.length);
int i=rs.getNumRecords();
System.out.println("当前记录条数:"+i);
rId = rs.getNextRecordID() -1;//俺加的。。。
System.out.println("RecordID:" + rId );//俺加的。。。
//改: byte[] by2=rs.getRecord(1);
byte[] by2=rs.getRecord(rId);//俺加的。。。
String str2=new String(by2);
System.out.println("当前第一条记录是:"+str2);
System.out.println("正在执行删除操作...");
//改:rs.deleteRecord(1);
rs.deleteRecord(rId);//俺加的。。。
i=rs.getNumRecords();
System.out.println("当前记录条数:"+i);

rs.closeRecordStore();
}catch(Exception ex){
ex.printStackTrace();
}
***********************************
看来id一旦被占了。。。。就像学号被占了,就算死了,这学号也被占了,要让它活就setRecord了,不过你的代码就要改更多的地方了。。。
------解决方案--------------------------------------------------------
getNumRecords 获取的是你一共存储过的记录仓库个数,而不是当前实际的仓库个数,你deleteRecord1号仓库后,1号仓库就不存在了,再删就会提示出错。。
  相关解决方案