Como excluir o banco de dados SQLite do Android programaticamente

151

Gostaria de excluir o arquivo de banco de dados do Android file systemprogramaticamente? Posso iniciar um script de shell adbque, por sua vez, executa um script de shell no espaço Android para fazer a exclusão do banco de dados? Posso fazer isso dentro de um JUnitcaso de teste (com uma system()chamada)?

Como faço para excluir um banco de dados inteiro no Android? Preciso fazer a coisa toda desaparecer para que eu possa testar a criação do banco de dados. Eu posso largar mesas, mas isso não é suficiente. Isso está no emulador, não no telefone.

Jim
fonte

Respostas:

410

Depois de ter seu contexto e saber o nome do banco de dados, use:

context.deleteDatabase(DATABASE_NAME);

Quando essa linha é executada, o banco de dados deve ser excluído.

Luke Dunstan
fonte
14
Certifique-se de fechar todas as conexões com o banco de dados antes de excluir. Caso contrário, você terá que reiniciar o aplicativo.
Jay Soyer
Simples e útil ... obrigado!
Marco Espinoza
13

É fácil digitar no seu shell:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db
Barmaley Red Star
fonte
Recebo a mensagem de volta "rm falhou para mydatabase.db, permissão negada". Você deve ter um telefone root para que isso funcione? Ou existe uma maneira de especificar uma permissão? Ou funciona apenas no emulador?
Peteh
2
@PeteH No emulador que você não precisa de permissão, mas por dispositivo real necessidade u'd estar enraizado
barmaley Red Star
9
Isso requer raiz e não é programaticamente .
Zoe
Para mim, isso não exigiu nenhuma configuração especial. Quero dizer, com certeza, eu estava conectado automaticamente como root, mas tudo funcionou :)
Vlad-ardelean
OK eu estou aqui. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Outros do que a remoção, cópia e outras coisas, não há uma dirou list filesou what the heck is in this directory/folderde comando?
DSlomer64
12

O método estático SQLiteDatabase.deleteDatabase (arquivo File) foi adicionado na API 16. Se você deseja gravar aplicativos compatíveis com dispositivos mais antigos, como fazer isso?

Eu tentei: file.delete ();

mas atrapalha o SQLiteOpenHelper.

Obrigado.

DEIXA PRA LÁ! Mais tarde, percebi que você estava usando Context .deleteDatabase (). O contexto funciona muito bem e exclui o diário também. Funciona para mim.

Além disso, descobri que precisava ligar para SQLiteOpenHelp.close () antes de excluir, para poder usar o LoaderManager para recriá-lo.

Rick Falck
fonte
11

Experimentar:

this.deleteDatabase(path); 

ou

context.deleteDatabase(path);
Drw
fonte
6

Também no Eclipse, você pode usar o DDMS, o que facilita muito.

Apenas verifique se o emulador está em execução e, em seguida, mude para a perspectiva DDMS no Eclipse. Você terá acesso total ao File Explorer, o que permitirá que você entre e exclua facilmente todo o banco de dados.

xtempore
fonte
1
Isso funciona com um dispositivo de telefone real? Não pude ver nenhuma subpasta na pasta de dados enquanto visualizava no modo DDMS.
31568 sammiwei
1
Mas esta pergunta é sobre a exclusão do banco de dados programaticamente?
Simon
6
context.deleteDatabase("database_name.db");

Isso pode ajudar alguém. Você deve mencionar a extensão, caso contrário, ela não funcionará.

vishwanath mirji
fonte
3

context.deleteDatabase (DATABASE_NAME); excluirá o banco de dados somente se todas as conexões estiverem fechadas. Se você estiver mantendo uma instância singleton para manipular o auxiliar do banco de dados - é fácil fechar a conexão aberta.

Caso o auxiliar de banco de dados seja usado em vários locais, instanciando diretamente, o deleteDatabase + killProcess fará o trabalho, mesmo que algumas conexões estejam abertas. Isso pode ser usado se o cenário do aplicativo não apresentar problemas ao reiniciar o aplicativo.

Aun
fonte
3

Exclua o banco de dados antigo ao desinstalar o aplicativo.

Definir android: allowBackup = "false" na tag do aplicativo no AndroidManifest.xml resolveu o problema. Parece que, por algum motivo estranho, o sistema operacional Android estava restaurando a partir de um backup toda vez que eu implantava o aplicativo.

Anurag Mishra
fonte
3

você pode criar um objeto de arquivo do caminho atual do banco de dados e excluí-lo quando excluirmos o arquivo da pasta

    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
fonte
0

Usei o método de exclusão de banco de dados do Android e o banco de dados foi removido com sucesso

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
fonte
0

Eu usei o seguinte para "formatar" o banco de dados no dispositivo depois de alterar a estrutura do banco de dados em ativos. Simplesmente descomente a linha no MainActivity quando quis que o banco de dados fosse lido novamente dos ativos. Isso redefinirá os valores e a estrutura do banco de dados do dispositivo para mach com o banco de dados preocupado na pasta assets.

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

Em seguida, implementarei um botão que executará o deleteDatabase para que o usuário possa redefinir seu progresso no jogo.

Jussi Tamminen
fonte
-2

No Application Manager, você pode excluir o aplicativo inteiro com dados. Ou apenas dados por si próprio. Isso inclui banco de dados.

  1. Navegue para Configurações. Você pode acessar o menu de configurações no menu de aplicativos ou, na maioria dos telefones, puxando a gaveta de notificações e tocando em um botão.

  2. Selecione o submenu Aplicativos. Em alguns telefones, esse menu terá um nome um pouco diferente, como Application Manager.

  3. Deslize para a direita na lista Todos os aplicativos. Ignore as listas de aplicativos em execução e baixados. Você deseja a lista Todos os aplicativos.

  4. Selecione o aplicativo que você deseja desativar. Uma tela de propriedades é exibida com um botão para Forçar parada no canto superior esquerdo e outro para Desativar ou Desinstalar atualizações no canto superior direito.

  5. Excluir dados.

f470071
fonte
8
O OP disse programaticamente . Ir às configurações e pressionar um botão não é programático.
mmking
@mmking eu estava ciente disso. É apenas o wa mais simples de remover o banco de dados e não as tabelas e o conteúdo. Ele disse que precisa testar a criação do banco de dados e isso faz isso. Eu estive procurando a mesma coisa e resolvi isso.
F470071