1
任何人都可以解釋爲什麼下面的事情發生。這是使用SQLite數據庫的Android應用程序。數據庫連接丟失後訪問SQLite數據庫
- 應用程序將新數據添加到存儲在外部存儲器中的db。
- 與此同時,此外部存儲器變得不可用(例如,我將它掛載到PC)。
- 當外部存儲器再次變爲可用時,我無法訪問db中的read_only模式。但是,如果我試圖在讀寫模式下打開它,它會很好。爲什麼?
我寫的代碼(下同),其中處理這個問題和它的作品很好,但我還是不明白爲什麼。
這是不是與剩餘的開放連接或類似的東西有關。爲了保險起見,我完全從設備中刪除了我的應用並重新安裝。但即使在那之後,db在只讀模式下也不可用。在db打開一次後,在讀寫模式下,可能會在下次打開只讀沒有任何問題。
當我說「不可用」時,我的意思是db打開狀態良好,但是任何對db的查詢都會因IO錯誤而失敗。
SQLiteDatabase db = SQLiteDatabase.openDatabase(f.getPath(), null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
if (!testQuery(db))
{
Utils.logD("Failed to open db at path: " + f + ". Trying recovering...");
db.close();
db = SQLiteDatabase.openDatabase(f.getPath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
if (!testQuery(db))
{
Utils.logD("Failed to open db at path: " + f + " (noway)");
db.close();
return null;
}
}
Utils.logD("DATABASE OPENED! " + db.hashCode());
謝謝。它很好地解釋了發生了什麼,儘管它仍然迫使我打開數據庫在應用程序部分寫入數據,從不寫任何內容。 (我有2個進程 - 一個添加/刪除數據,第二個只讀) –