Bagaimana menghapus basis data SQLite dari Android secara terprogram

151

Saya ingin menghapus file database dari yang Android file systemterprogram? Dapatkah saya memiliki peluncuran skrip shell adbyang pada gilirannya menjalankan skrip shell di ruang Android untuk melakukan penghapusan basis data? Bisakah saya menyelesaikan ini dari dalam JUnittest case (dengan system()panggilan)?

Bagaimana cara saya menghapus seluruh basis data di Android? Saya perlu membuat semuanya hilang sehingga saya bisa menguji pembuatan basis data. Saya bisa menjatuhkan tabel, tapi itu tidak cukup. Ini ada di emulator, bukan di ponsel.

Jim
sumber

Jawaban:

410

Setelah Anda memiliki Konteks dan mengetahui nama basis data, gunakan:

context.deleteDatabase(DATABASE_NAME);

Ketika baris ini dijalankan, basis data harus dihapus.

Luke Dunstan
sumber
14
Pastikan Anda menutup semua koneksi Database sebelum menghapus. Lain Anda harus me-restart aplikasi.
Jay Soyer
Sederhana dan bermanfaat ... terima kasih!
Marco Espinoza
13

Cukup ketik saja dari shell Anda:

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db
Barmaley Red Star
sumber
Saya mendapatkan pesan kembali "rm gagal untuk mydatabase.db, Izin ditolak". Haruskah Anda memiliki ponsel yang di-root agar ini berfungsi? Atau adakah cara untuk menentukan izin? Atau apakah itu hanya berfungsi pada emulator?
PeteH
2
@PeteH Pada emulator Anda tidak perlu izin, tetapi untuk perangkat nyata Anda harus di-root
Barmaley Red Star
9
Ini membutuhkan root dan tidak terprogram .
Zoe
Bagi saya ini tidak memerlukan pengaturan khusus. Maksud saya yakin, saya secara otomatis login sebagai root, tetapi semuanya bekerja :)
vlad-ardelean
Oke, saya disini. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. Selain menghapus, menyalin, dan hal-hal lain, bukankah ada diratau list filesatau what the heck is in this directory/folderperintah?
DSlomer64
12

Metode statis SQLiteDatabase.deleteDatabase (File file) ditambahkan di API 16. Jika Anda ingin menulis aplikasi yang mendukung perangkat yang lebih lama, bagaimana Anda melakukannya?

Saya mencoba: file.delete ();

tapi itu mengacaukan SQLiteOpenHelper.

Terima kasih.

LUPAKAN! Saya kemudian menyadari bahwa Anda menggunakan Context .deleteDatabase (). Konteks satu berfungsi dengan baik dan menghapus jurnal juga. Bekerja untukku.

Juga, saya menemukan saya perlu memanggil SQLiteOpenHelp.close () sebelum melakukan penghapusan, sehingga saya kemudian dapat menggunakan LoaderManager untuk membuatnya kembali.

Rick Falck
sumber
11

Mencoba:

this.deleteDatabase(path); 

atau

context.deleteDatabase(path);
Drw
sumber
6

Juga dari Eclipse Anda dapat menggunakan DDMS yang membuatnya sangat mudah.

Pastikan emulator Anda berjalan, dan kemudian beralih ke perspektif DDMS di Eclipse. Anda akan memiliki akses penuh ke File Explorer yang memungkinkan Anda masuk dan menghapus seluruh database dengan mudah.

xtempore
sumber
1
Apakah ini berfungsi dengan perangkat telepon yang sebenarnya? Saya tidak bisa melihat subfolder di folder data saat melihat dalam mode DDMS.
sammiwei
1
Tetapi pertanyaan ini adalah tentang menghapus basis data secara terprogram?
Simon
6
context.deleteDatabase("database_name.db");

Ini mungkin membantu seseorang. Anda harus menyebutkan ekstensi jika tidak, itu tidak akan berfungsi.

Vishwanath Mirji
sumber
3

context.deleteDatabase (DATABASE_NAME); akan menghapus basis data hanya jika semua koneksi ditutup. Jika Anda mempertahankan instance tunggal untuk menangani pembantu basis data Anda - mudah untuk menutup Koneksi yang dibuka.

Jika databasehelper digunakan di banyak tempat dengan membuat instance langsung, deleteDatabase + killProcess akan melakukan pekerjaan bahkan jika beberapa koneksi terbuka. Ini dapat digunakan jika skenario aplikasi tidak memiliki masalah dalam me-restart aplikasi.

Aun
sumber
3

Hapus Db lama saat menghapus aplikasi.

Pengaturan android: allowBackup = "false" di tag aplikasi di AndroidManifest.xml memperbaiki masalah. Tampaknya untuk beberapa alasan aneh OS Android memulihkan dari cadangan setiap kali saya menggunakan aplikasi.

Anurag Mishra
sumber
3

Anda dapat membuat objek file dari jalur basis data saat ini dan kemudian menghapusnya saat kami menghapus file dari folder

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

Saya menggunakan metode penghapusan basis data Android dan basis data berhasil dihapus

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

Saya telah menggunakan yang berikut untuk "memformat" database pada perangkat setelah saya mengubah struktur database dalam aset. Saya cukup batalkan komentar pada baris di MainActivity ketika saya ingin agar basis data dibaca dari aset lagi. Ini akan mengatur ulang nilai dan struktur basis data perangkat ke mach dengan database yang disibukkan dalam folder aset.

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

Selanjutnya, saya akan menerapkan tombol yang akan menjalankan deleteDatabase sehingga pengguna dapat mengatur ulang progresnya di dalam game.

Jussi Tamminen
sumber
-2

Dari Manajer Aplikasi, Anda dapat menghapus seluruh aplikasi dengan data. Atau hanya data saja. Ini termasuk basis data.

  1. Arahkan ke Pengaturan. Anda dapat masuk ke menu pengaturan baik di menu aplikasi Anda atau, pada sebagian besar ponsel, dengan menarik laci pemberitahuan dan mengetuk tombol di sana.

  2. Pilih submenu Aplikasi. Pada beberapa ponsel menu ini akan memiliki nama yang sedikit berbeda seperti Manajer Aplikasi.

  3. Geser ke kanan ke daftar Semua aplikasi. Abaikan daftar aplikasi Running dan Unduhan. Anda ingin daftar Semua aplikasi.

  4. Pilih aplikasi yang ingin Anda nonaktifkan. Layar properti muncul dengan tombol untuk Force Stop di kiri atas dan yang lain untuk Nonaktifkan atau Hapus instalan pembaruan di sisi kanan atas.

  5. Hapus data.

f470071
sumber
8
OP mengatakan secara pemrograman . Pergi ke pengaturan dan menekan tombol tidak secara terprogram.
mmking
@mmking, aku tahu itu. Hanya saja ini adalah cara paling sederhana untuk menghapus database dan bukan tabel dan konten. Dia mengatakan dia membutuhkannya untuk menguji pembuatan database dan ini melakukan itu. Saya telah mencari hal yang sama dan setuju untuk itu.
f470071