Cómo eliminar la base de datos SQLite de Android mediante programación

151

Me gustaría eliminar el archivo de base de datos desde el punto de vista Android file systemprogramático? ¿Puedo iniciar un script de shell adbque a su vez ejecuta un script de shell en el espacio de Android para eliminar la base de datos? ¿Puedo hacer esto desde un JUnitcaso de prueba (con una system()llamada)?

¿Cómo elimino una base de datos completa en Android? Necesito hacer que todo desaparezca para poder probar la creación de la base de datos. Puedo soltar tablas, pero eso no es suficiente. Esto está en el emulador, no en un teléfono.

Jim
fuente

Respuestas:

410

Una vez que tenga su Contexto y sepa el nombre de la base de datos, use:

context.deleteDatabase(DATABASE_NAME);

Cuando se ejecuta esta línea, la base de datos debe eliminarse.

Luke Dunstan
fuente
14
Asegúrese de cerrar todas las conexiones de la base de datos antes de eliminar. De lo contrario, tendrá que reiniciar la aplicación.
Jay Soyer
Simple y útil ... gracias!
Marco Espinoza
13

Es fácil simplemente escribir desde su shell:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db
Barmaley Red Star
fuente
Recibo el mensaje "rm falló para mydatabase.db, permiso denegado". ¿Debe tener un teléfono rooteado para que esto funcione? ¿O hay una manera de especificar un permiso? ¿O solo funciona en el emulador?
PeteH
2
@PeteH En el emulador no necesita permiso, pero para un dispositivo real necesitaría estar rooteado
Barmaley Red Star
9
Esto requiere root y no es programáticamente .
Zoe
Para mí esto no requirió ninguna configuración especial. Quiero decir, estaba registrado automáticamente como root, pero todo funcionó :)
vlad-ardelean
Vale, estoy aquí. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Aparte de la eliminación, copia y otras cosas, no hay una diro list fileso what the heck is in this directory/foldercomandos?
DSlomer64
12

El método estático SQLiteDatabase.deleteDatabase (archivo de archivo) se agregó en la API 16. Si desea escribir aplicaciones que admitan dispositivos más antiguos, ¿cómo lo hace?

Intenté: file.delete ();

pero arruina SQLiteOpenHelper.

Gracias.

¡NO IMPORTA! Más tarde me di cuenta de que estás usando Context .deleteDatabase (). El contexto uno funciona muy bien y elimina el diario también. Funciona para mi.

Además, descubrí que necesitaba llamar a SQLiteOpenHelp.close () antes de eliminar, para poder usar LoaderManager para recrearlo.

Rick Falck
fuente
11

Tratar:

this.deleteDatabase(path); 

o

context.deleteDatabase(path);
Drw
fuente
6

También desde Eclipse puede usar DDMS, lo que lo hace realmente fácil.

Solo asegúrese de que su emulador se esté ejecutando y luego cambie a la perspectiva DDMS en Eclipse. Tendrá acceso completo al Explorador de archivos que le permitirá ingresar y eliminar fácilmente toda la base de datos.

xtempore
fuente
1
¿Funciona esto con un dispositivo telefónico real? No pude ver ninguna subcarpeta en la carpeta de datos mientras la veía en el modo DDMS.
sammiwei
1
¿Pero esta pregunta se trata de eliminar la base de datos mediante programación?
Simon
6
context.deleteDatabase("database_name.db");

Esto podría ayudar a alguien. Tienes que mencionar la extensión de lo contrario, no funcionará.

vishwanath mirji
fuente
3

context.deleteDatabase (DATABASE_NAME); eliminará la base de datos solo si todas las conexiones están cerradas. Si mantiene una instancia singleton para manejar su ayudante de base de datos, es fácil cerrar la conexión abierta.

En caso de que el asistente de base de datos se use en varios lugares al instanciar directamente, deleteDatabase + killProcess hará el trabajo incluso si algunas conexiones están abiertas. Esto se puede usar si el escenario de la aplicación no tiene ningún problema al reiniciar la aplicación.

Aun
fuente
3

Elimine Db antiguo cuando desinstale la aplicación.

La configuración de android: allowBackup = "false" en la etiqueta de la aplicación en AndroidManifest.xml solucionó el problema. Parece que, por alguna extraña razón, el sistema operativo Android se estaba restaurando desde una copia de seguridad cada vez que implementaba la aplicación.

Anurag Mishra
fuente
3

puede crear un objeto de archivo de la ruta de la base de datos actual y luego eliminarlo a medida que eliminamos el archivo de la carpeta

    File data = Environment.getDataDirectory();
    String currentDBPath = "/data/com.example.demo/databases/" + DATABASE_NAME;
    File currentDB = new File(data, currentDBPath);
    boolean deleted = SQLiteDatabase.deleteDatabase(currentDB);
DharmendraKumar Jagodana
fuente
0

Utilicé el método de eliminación de la base de datos de Android y la base de datos se eliminó con éxito

public bool DeleteDatabase()
        {
            var dbName = "TenderDb.db";
            var documentDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            var path = Path.Combine(documentDirectoryPath, dbName);
            return Android.Database.Sqlite.SQLiteDatabase.DeleteDatabase(new Java.IO.File(path));
        }
Afshin Razaghi
fuente
0

He usado lo siguiente para "formatear" la base de datos en el dispositivo después de haber cambiado la estructura de la base de datos en activos. Simplemente eliminé el comentario de la línea en MainActivity cuando quería que la base de datos se volviera a leer de los activos. Esto restablecerá los valores y la estructura de la base de datos del dispositivo a mach con la base de datos ocupada en la carpeta de activos.

    //database initialization. Uncomment to clear the database
    //deleteDatabase("questions.db");

A continuación, implementaré un botón que ejecutará deleteDatabase para que el usuario pueda restablecer su progreso en el juego.

Jussi Tamminen
fuente
-2

Desde el Administrador de aplicaciones, puede eliminar toda la aplicación con datos. O simplemente datos por sí mismo. Esto incluye la base de datos.

  1. Ve a Configuración. Puede acceder al menú de configuración en el menú de aplicaciones o, en la mayoría de los teléfonos, abriendo el cajón de notificaciones y tocando un botón allí.

  2. Seleccione el submenú de aplicaciones. En algunos teléfonos, este menú tendrá un nombre ligeramente diferente, como Administrador de aplicaciones.

  3. Desliza hacia la derecha a la lista Todas las aplicaciones. Ignora las listas de aplicaciones en ejecución y descargadas. Desea la lista Todas las aplicaciones.

  4. Seleccione la aplicación que desea deshabilitar. Aparece una pantalla de propiedades con un botón para Forzar detención en la esquina superior izquierda y otro para Desactivar o Desinstalar actualizaciones en la esquina superior derecha.

  5. Borrar datos.

f470071
fuente
8
El OP dijo programáticamente . Ir a la configuración y presionar un botón no es programáticamente.
mmking
@mmking estaba al tanto de eso. Es solo que este es el wa más simple para eliminar la base de datos y no las tablas y el contenido. Dijo que lo necesita para probar la creación de la base de datos y esto lo hace. He estado buscando lo mismo y me decidí por eso.
f470071