現象:程式執行期間寫入 RecordStore 正常,關閉模擬器後資料消失,appdb 目錄下無 .db 檔案。
WTK 2.5.1 預設儲存根目錄為 C:\WTK2.5.1\appdb,若專案路徑含空白或權限不足,寫入會失敗卻不拋例外。
.\DefaultColorPhone(相對路徑指向專案 appdb/DefaultColorPhone)。RecordEnumeration 內部為循環鏈結,hasNextElement()/nextRecord() 從「最新寫入」向「最舊」走訪,導致讀出順序與寫入順序相反。
while (re.hasNextElement()) {
vec.addElement(re.nextRecord()); // 3,2,1
}
public Vector getRecords(RecordStore rs) {
try {
RecordEnumeration re = rs.enumerateRecords(null, null, false);
int count = re.numRecords();
if (count == 0) return null;
Vector v = new Vector();
re.reset(); // 移至邏輯「最舊」之前
while (re.hasPreviousElement()) {
v.addElement(re.previousRecord()); // 1,2,3
}
return v;
} catch (RecordStoreException e) {
e.printStackTrace(); return null;
}
}
try-catch(RecordStoreException)。RecordStore 前確認 closeRecordStore(),避免檔案鎖定。正確設定 WTK 儲存路徑並理解 RecordEnumeration 環狀遍歷特性,能消除 J2ME 本地儲存開發中最常見的兩大困擾。