Come eliminare il database SQLite da Android a livello di codice


151

Vorrei cancellare il file di database dal Android file systemprogramma? Posso avere un lancio di script di shell adbche a sua volta esegue uno script di shell nello spazio Android per fare la cancellazione del database? Posso farlo da un JUnitcaso di test (con una system()chiamata)?

Come cancello un intero database in Android? Devo far sparire il tutto per poter testare la creazione del database. Posso eliminare le tabelle, ma non è abbastanza. Questo è nell'emulatore, non su un telefono.

Risposte:


410

Una volta che hai il tuo contesto e conosci il nome del database, usa:

context.deleteDatabase(DATABASE_NAME);

Quando viene eseguita questa riga, è necessario eliminare il database.


14
Assicurarsi di chiudere tutte le connessioni al database prima di eliminare. Altrimenti dovrai riavviare l'applicazione.
Jay Soyer,

Semplice e utile ... grazie!
Marco Espinoza,

13

È facile basta digitare dalla shell:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db

Ricevo il messaggio "rm fallito per mydatabase.db, autorizzazione negata". Devi avere un telefono rootato per farlo funzionare? O c'è un modo per specificare un'autorizzazione? O funziona solo sull'emulatore?
PeteH,

2
@PeteH Sull'emulatore non hai bisogno dell'autorizzazione, ma per il dispositivo reale devi essere
rootato

9
Ciò richiede root e non è programmaticamente .
Zoe,

Per me questo non ha richiesto alcuna configurazione speciale. Voglio dire, sono stato automaticamente registrato come root, ma tutto ha funzionato :)
vlad-ardelean

Ok sono qui. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Altro che la rimozione, la copia e l'altro, non c'è un diro list fileso what the heck is in this directory/folderdi comando?
DSlomer64,

12

Il metodo statico SQLiteDatabase.deleteDatabase (File file) è stato aggiunto nell'API 16. Se si desidera scrivere app che supportano dispositivi meno recenti, come si fa?

Ho provato: file.delete ();

ma rovina SQLiteOpenHelper.

Grazie.

NON IMPORTA! In seguito ho capito che stai usando Context .deleteDatabase (). Il contesto funziona alla grande ed elimina anche il diario. Per me va bene.

Inoltre, ho scoperto che dovevo chiamare SQLiteOpenHelp.close () prima di eseguire l'eliminazione, in modo da poter utilizzare LoaderManager per ricrearlo.


11

Provare:

this.deleteDatabase(path); 

o

context.deleteDatabase(path);

6

Inoltre da Eclipse è possibile utilizzare DDMS che lo rende davvero semplice.

Assicurati solo che l'emulatore sia in esecuzione, quindi passa alla prospettiva DDMS in Eclipse. Avrai accesso completo a Esplora file che ti consentirà di accedere ed eliminare facilmente l'intero database.


1
Funziona con un vero dispositivo telefonico? Non è stato possibile visualizzare alcuna sottocartella nella cartella dei dati durante la visualizzazione in modalità DDMS.
sammiwei,

1
Ma questa domanda riguarda l'eliminazione a livello di codice del database?
Simon,

6
context.deleteDatabase("database_name.db");

Questo potrebbe aiutare qualcuno. È necessario menzionare l'estensione altrimenti, non funzionerà.


3

context.deleteDatabase (DATABASE_NAME); cancellerà il database solo se tutte le connessioni sono chiuse. Se si mantiene l'istanza singleton per la gestione dell'helper del database, è facile chiudere la connessione aperta.

Nel caso in cui il databasehelper venga utilizzato in più posizioni creando un'istanza direttamente, deleteDatabase + killProcess farà il lavoro anche se alcune connessioni sono aperte. Questo può essere usato se lo scenario dell'applicazione non ha problemi nel riavvio dell'app.


3

Elimina il vecchio Db quando disinstalla l'app.

L'impostazione di android: allowBackup = "false" nel tag dell'applicazione in AndroidManifest.xml ha risolto il problema. Sembra che per qualche strana ragione il sistema operativo Android si ripristinasse da un backup ogni volta che ho distribuito l'app.


3

è possibile creare un oggetto file del percorso del database corrente e quindi eliminarlo mentre eliminiamo il file dalla cartella

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

0

Ho usato il metodo di eliminazione del database Android e il database è stato rimosso con successo

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));
        }

0

Ho usato quanto segue per "formattare" il database sul dispositivo dopo aver modificato la struttura del database nelle risorse. Ho semplicemente decommentato la riga in MainActivity quando volevo che il database venisse letto nuovamente dagli asset. Ciò ripristinerà i valori e la struttura del database del dispositivo su mach con il database interessato nella cartella delle risorse.

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

Successivamente, implementerò un pulsante che eseguirà il deleteDatabase in modo che l'utente possa ripristinare i suoi progressi nel gioco.


-2

Da Gestione applicazioni, è possibile eliminare l'intera applicazione con i dati. O solo dati da solo. Questo include database.

  1. Vai su Impostazioni. Puoi accedere al menu delle impostazioni nel menu delle app o, sulla maggior parte dei telefoni, tirando verso il basso il riquadro delle notifiche e toccando un pulsante lì.

  2. Seleziona il sottomenu App. Su alcuni telefoni questo menu avrà un nome leggermente diverso come Application Manager.

  3. Scorri verso destra nell'elenco Tutte le app. Ignora gli elenchi delle app in esecuzione e scaricate. Si desidera l'elenco di tutte le app.

  4. Seleziona l'app che desideri disabilitare. Viene visualizzata una schermata delle proprietà con un pulsante per Arresto forzato in alto a sinistra e un altro per Disabilita o Disinstalla aggiornamenti in alto a destra.

  5. Elimina dati


8
Ha detto l'OP programmaticamente . Andare alle impostazioni e premere un pulsante non è programmaticamente.
svelando il

@mmking Ne ero consapevole. È solo che questo è il wa più semplice per rimuovere il database e non tabelle e contenuti. Ha detto che ne ha bisogno per testare la creazione del database e questo lo fa. Ho cercato la stessa cosa e ho deciso di farlo.
f470071,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.