Android中是否有用于SQLite的内存缓存,以及如何释放或清除它?

xu *_*len 5 sqlite android

首先,我在Android应用程序中创建一个名为“ mydb”的数据库:

DBHelper dbHelper = new DBHelper(context, "mydb", null, 1);//DBHelper is my custom class
Run Code Online (Sandbox Code Playgroud)

并将一些数据写入表中:

SQLiteDatabase db = dbHelper.getReadableDatabase();
db.execSQL("insert into mytable(name, text) values ('allen','hello')");
Run Code Online (Sandbox Code Playgroud)

在这里,一切都很好。但是,然后,我使用软件“ RE Explore”(一定在有根设备上)不通过编程手动删除此数据库。

然后,在我的代码中,我读取了该数据库表。令人惊讶的是,我仍然可以获取存储的数据。

Cursor cursor = db.query("mytable", new String[]{"name","text"}, null, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

为什么?

mit*_*nia 5

引用自 Android Developers 参考网站:

一旦打开成功,数据库就被缓存了,所以每次需要写入数据库的时候都可以调用这个方法。(当您不再需要数据库时,请确保调用 close()。)

这是从的描述getWritableDatabase()方法,但是两者getReadableDatabase()getWritableDatabase()返回基本上相同的对象,用于读取该数据库。

请注意,getWritableDatabase()如果要将您对设备内存中的数据库所做的更改持久化,则应使用该选项。否则,它们将仅在应用程序运行期间有效,并且在应用程序关闭后将被丢弃。如果您希望完全删除数据库,您应该调用 SQLiteDatabase 的close()方法以使缓存无效。


小智 -1

您需要从手机中删除该应用程序,然后重新安装