- 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号仓库就不存在了,再删就会提示出错。。