¿Existe un caché de memoria para SQLite en Android y cómo liberarlo o borrarlo?

En primer lugar, creo una base de datos llamada "mydb" en mi aplicación para Android:

DBHelper dbHelper = new DBHelper(context, "mydb", null, 1);//DBHelper is my custom class 

Y escribir algunos datos en su tabla:

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

Aquí, todo está bien. Pero luego, eliminar esta base de datos manualmente no por la programación, con un software "RE explorar" (Ciertamente en un dispositivo con raíz).

Entonces, en mi código, leo esta tabla de la base de datos. Lo que es sorprendente es que todavía podría obtener los datos que almacene.

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

¿Por qué?

Citando desde el sitio web de referencia de Android Developers:

Una vez abierto correctamente, la base de datos se almacena en caché , por lo que puede llamar a este método cada vez que necesite escribir en la base de datos. (Asegúrese de llamar a close () cuando ya no necesite la base de datos.)

Esto es a partir de la descripción del método getWritableDatabase() , sin embargo, tanto getReadableDatabase() como getWritableDatabase() devuelven básicamente el mismo objeto para leer la base de datos.

Tenga en cuenta que debe utilizar getWritableDatabase() si desea conservar los cambios que realice en la base de datos en la memoria interna del dispositivo. De lo contrario, sólo serán válidos durante el tiempo de ejecución de la aplicación y se descartarán una vez que la aplicación esté cerrada. Si desea eliminar completamente la base de datos, debe llamar al método close() SQLiteDatabase para invalidar la caché.

Debe eliminar la aplicación del teléfono y volver a instalarla.

Utilice la SQLiteDatabase.deleteDatabase(File file) para eliminar la base de datos

Elimina una base de datos que incluye su archivo de diario y otros archivos auxiliares que pueden haber sido creados por el motor de base de datos.

Asegúrese de haber cerrado todas las conexiones que están abiertas.

En caso de que no son capaces de hacer eso, simplemente cal el deleteDatabase seguido por el proceso de matar .. – no recomendado

  • Android - cómo utilizar "select last_insert_rowid ();"
  • Sqlite - en rebaja
  • Cómo eliminar miles de registros de sqlite android
  • Prueba de unidad de base de datos SQLite de Android
  • Cómo encontrar el valor máximo de la columna en la base de datos sqlite
  • Android - Contenido Valores sobre la escritura de filas existentes
  • ¿Es posible comparar dos cursores?
  • Posible obtener detalles de error específicos de Android SQLiteConstraintException?
  • Ormlite Android inserciones masivas
  • Cómo comparar representaciones de cadena de dobles si termina en .00
  • Mueva el cursor a la fila por una de las columnas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.