SQLite veritabanı Android'den programlı olarak nasıl silinir


151

Android file systemProgramlı olarak veritabanı dosyasını silmek istiyorum ? adbVeritabanı silme işlemini yapmak için Android alanında bir kabuk komut dosyası çalıştıran bir kabuk komut dosyası lansmanı alabilir miyim ? Bunu bir JUnittest vakasından ( system()çağrı ile) alabilir miyim?

Android'de bir veritabanının tamamını nasıl silebilirim? Ben veritabanı oluşturma test edebilirsiniz böylece her şeyi ortadan kaldırmak gerekir. Tabloları bırakabilirim, ama bu yeterli değil. Bu emülatörde, telefonda değil.

Yanıtlar:


410

Bağlamınızı aldıktan ve veritabanının adını öğrendikten sonra şunu kullanın:

context.deleteDatabase(DATABASE_NAME);

Bu satır çalıştırıldığında, veritabanı silinmelidir.


14
Silmeden önce tüm Veritabanı bağlantılarını kapattığınızdan emin olun. Yoksa uygulamayı yeniden başlatmanız gerekecek.
Jay Soyer

Basit ve kullanışlı ... teşekkürler!
Marco Espinoza

13

Kabuğunuzdan yazmanız kolaydır:

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

"Rda mydatabase.db için başarısız oldu, İzin reddedildi" iletisini alıyorum. Bunun çalışması için rootlu bir telefonunuz olmalı mı? Veya izin belirtmenin bir yolu var mı? Yoksa sadece emülatörde çalışıyor mu?
PeteH

2
@PeteH Emülatörde izne ihtiyacınız yok, ancak gerçek cihaz için root olmanız gerekiyor
Barmaley Red Star

9
Bu kök gerektirir ve programlı değildir .
Zoe

Benim için bu özel bir kurulum gerektirmedi. Demek istediğim, otomatik olarak root olarak giriş yaptım, ama her şey çalıştı :)
vlad-ardelean

Tamam buradayım. root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. , Kaldırma kopyalama ve diğer şeyler dışında bir yok dirya list filesya what the heck is in this directory/folderkomut?
DSlomer64

12

SQLiteDatabase.deleteDatabase (Dosya dosyası) statik yöntemi API 16'ya eklenmiştir. Daha eski aygıtları destekleyen uygulamalar yazmak istiyorsanız, bunu nasıl yaparsınız?

Denedim: file.delete ();

ancak SQLiteOpenHelper karıştırır.

Teşekkürler.

BOŞVER! Daha sonra Context .deleteDatabase () kullandığınızı fark ettim . Bağlam bir harika çalışır ve günlüğü de siler. Benim için çalışıyor.

Ayrıca, ben silme yapmadan önce SQLiteOpenHelp.close () çağırmak için gerekli buldum , böylece daha sonra yeniden oluşturmak için LoaderManager kullanabilirsiniz.


11

Deneyin:

this.deleteDatabase(path); 

veya

context.deleteDatabase(path);

6

Ayrıca Eclipse'den DDMS'yi kullanabilirsiniz, bu da gerçekten kolaylaştırır.

Emülatörünüzün çalıştığından emin olun ve Eclipse'de DDMS perspektifine geçin. İçeri girmenizi ve tüm veritabanını kolayca silmenizi sağlayacak Dosya Gezgini'ne tam erişiminiz olacak.


1
Bu gerçek bir telefon cihazıyla çalışıyor mu? DDMS modunda görüntülenirken veri klasörü altında herhangi bir alt klasör göremedim.
sammiwei

1
Ama bu soru veritabanını programlı olarak silmekle mi ilgili?
Simon

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

Bu birine yardımcı olabilir. Uzantıyı belirtmeniz gerekir, aksi takdirde çalışmaz.


3

context.deleteDatabase (DATABASE_NAME); veritabanını yalnızca tüm bağlantılar kapalıysa siler. Veritabanı yardımcısını işlemek için singleton örneğini koruyorsanız - açılan Bağlantıyı kapatmak kolaydır.

Veritabanının doğrudan somutlaştırılarak birden çok yerde kullanılması durumunda, deleteDatabase + killProcess bazı bağlantılar açık olsa bile işi yapar. Bu, uygulama senaryosunda uygulamanın yeniden başlatılmasında herhangi bir sorun yoksa kullanılabilir.


3

Uygulamayı kaldırırken eski Db'yi silin.

AndroidManifest.xml'deki uygulama etiketinde android: allowBackup = "false" ayarı sorunu çözdü. Bazı garip nedenlerden dolayı, uygulamayı her dağıttığımda Android işletim sisteminin bir yedeklemeden geri yüklendiği anlaşılıyor.


3

geçerli veritabanı yolundan bir dosya nesnesi oluşturabilir ve dosyayı klasörden sildiğimizde silebilirsiniz

    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

Android veritabanı silme yöntemini kullandım ve veritabanı başarıyla kaldırıldı

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

Varlıklarda veritabanının yapısını değiştirdikten sonra cihazdaki veritabanını "biçimlendirmek" için aşağıdakileri kullandım. Ben veritabanı tekrar varlıklardan okunmasını istediğim zaman ben sadece MainActivity satırındaki uncomment. Bu işlem, aygıt veritabanı değerlerini ve yapısını varlıklar klasöründeki meşgul veritabanı ile mach olarak sıfırlar.

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

Daha sonra, kullanıcının oyundaki ilerlemesini sıfırlayabilmesi için deleteDatabase'i çalıştıracak bir düğme uygulayacağım.


-2

Uygulama Yöneticisi'nden tüm uygulamayı verilerle silebilirsiniz. Veya sadece kendi kendine veri. Buna veritabanı dahildir.

  1. Ayarlar'a gidin. Ayarlar menüsüne uygulamalar menünüzden veya çoğu telefonda bildirim çekmecesini aşağı çekip oradaki bir düğmeye dokunarak ulaşabilirsiniz.

  2. Uygulamalar alt menüsünü seçin. Bazı telefonlarda bu menünün Uygulama Yöneticisi gibi biraz farklı bir adı olacaktır.

  3. Tüm uygulamalar listesine sağa doğru hızlıca kaydırın. Çalışan ve İndirilen uygulamaların listesini yok sayın. Tüm uygulamalar listesini istiyorsunuz.

  4. Devre dışı bırakmak istediğiniz uygulamayı seçin. Sol üst taraftaki Zorla Durdur düğmesi ve sağ üst taraftaki Güncelleştirmeleri Devre Dışı Bırak veya Kaldır için bir düğme içeren özellikler ekranı görünür.

  5. Verileri silin.


8
Dedi OP, programlı bir şekilde . Ayarlara gitmek ve bir düğmeye basmak programlı değildir .
mmking

@mmking Bunun farkındaydım. Sadece bu tabloları ve içeriği değil, veritabanını kaldırmak için en basit wa olmasıdır. Veritabanı oluşturmayı test etmek için buna ihtiyacı olduğunu söyledi ve bu da bunu yapıyor. Aynı şeyi arıyordum ve bunun için karar verdim.
f470071
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.