簡體   English   中英

Android中的SQLite是否有內存緩存以及如何釋放或清除它?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM