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