JavaMe连载(7)-数据永久存储 (四)

2014-11-24 07:56:19 · 作者: · 浏览: 2
AME="USER_DB";
private static RecordStore info;

public UserDataRecord(){
}

//打开RecordStore,没有则创建
public void openDataBase() {
try {
info = RecordStore.openRecordStore(RECORDSTORE_NAME, true);
}catch (RecordStoreException ex) {
info =null;
}
}
//关闭RecordStore
public void closeDataBase() {
if (info!= null) {
try {
info.closeRecordStore();
info=null;
} catch (RecordStoreException ex) {}
}
}
//增加记录
public int db_addRecord(UserDataItem item) {

try {
this.openDataBase();
byte[] data=item.getBytes();
int id=info.getNextRecordID();
info.addRecord(data,0,data.length);
this.closeDataBase();
return id;
} catch (RecordStoreException ex) { }

return -1;
}
//更新记录
public void db_updateRecord(UserDataItem item){

try {
this.openDataBase();
byte[] data=item.getBytes();
info.setRecord(item.getId(),data,0,data.length);
this.closeDataBase();
} catch (RecordStoreException ex) { }
}
//访问一条记录 www.2cto.com
public UserDataItem db_getRecord(int id){
UserDataItem item=null;

try {
this.openDataBase();
item = new UserDataItem(id,info.getRecord(id));
this.closeDataBase();
} catch (RecordStoreException ex) { }

return item;
}
//删除一条记录
public void db_deleteRecord(int id){
try {
this.openDataBase();
info.deleteRecord(id);
this.closeDataBase();
} catch (RecordStoreException ex) {}
}

//删除所有记录
public void db_deleteAllRecord(){
try {
RecordStore.deleteRecordStore(RECORDSTORE_NAME);
} catch (RecordStoreException ex) {}
}

//访问所有记录
public Vector db_getRecords(){
Vector items=new Vector(10,3);
this.openDataBase();//打开RecordStore
RecordEnumeration enum1=null;
int ind=0;
try{
UserDataItem item=null;
enum1=info.enumerateRecords(null,new InnerComparator(),false);

while(enum1.hasPreviousElement()){
ind=enum1.previousRecordId();
item=new UserDataItem(ind,info.getRecord(ind));
items.addElement(item);
}

}catch(Exception ex){ex.printStackTrace();}
finally{
try{
enum1.destroy();
}catch(Exception e){}

this.closeDataBase();//关闭RecordStore
}//end finally

return items;
}
//一个简单的比较器
private class InnerComparator implements RecordComparator{
public int compare(byte[] rec1, byte[] rec2){
if(rec1.length>rec2.length)
return FOLLOWS;
else if(rec1.length return PRECEDES;
else
return EQUIVALENT;
}

}
}

【分析】

我们模拟了一种数据库,下以“数据库”称之,实际上还是对记录进行操作。

1 打开数据库

[html] public void openDataBase() {
try {