[英]Is there a memory cache for SQLite in Android and how to release or clear it?
首先,我在Android應用中創建了一個名為“mydb”的數據庫:
DBHelper dbHelper = new DBHelper(context, "mydb", null, 1);//DBHelper is my custom class
並將一些數據寫入其表:
SQLiteDatabase db = dbHelper.getReadableDatabase();
db.execSQL("insert into mytable(name, text) values ('allen','hello')");
一切都好。 但是,我手動刪除這個數據庫不是通過編程,使用軟件“RE探索”(當然在root設備上)。
然后,在我的代碼中,我讀了這個數據庫表。 令人驚訝的是,我仍然可以獲得我存儲的數據。
Cursor cursor = db.query("mytable", new String[]{"name","text"}, null, null, null, null, null);
為什么?
引自Android開發者參考網站:
成功打開后, 數據庫將被緩存 ,因此您可以在每次需要寫入數據庫時調用此方法。 (確保在不再需要數據庫時調用close()。)
這是來自getWritableDatabase()
方法的描述,但getReadableDatabase()
和getWritableDatabase()
返回基本相同的對象來讀取數據庫。
請注意,如果要將對數據庫所做的更改保留在設備的內部存儲器中,則應使用getWritableDatabase()
。 否則它們僅在應用程序運行時期間有效,並在應用程序關閉后被丟棄。 如果要完全刪除數據庫,則應調用SQLiteDatabase的close()
方法以使緩存無效。
您需要從手機中刪除該應用,然后重新安裝
使用SQLiteDatabase.deleteDatabase(File file)
API刪除數據庫
刪除數據庫,包括其日志文件和可能由數據庫引擎創建的其他輔助文件。
確保已關閉所有打開的連接。
如果您無法做到這一點,只需調用deleteDatabase,然后執行kill process .. - 不推薦
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.