SORU
12 Mart 2011, CUMARTESİ


Dahili veritabanı yedekleme nasıl yapılır?Android yedekleme/geri yükleme:

FileBackupHelper yedekleme ve yerel veritabanını geri yüklemek için sağlanan BackupAgentHelper kullanarak hayata geçirdik. Bu genellikle birlikte ContentProviders ve /data/data/yourpackage/databases/ bulunan bir veritabanıdır.

Bu yaygın bir durum olduğunu düşünürdüm. Doktorlar ne yapacağı konusunda net değil ancak: http://developer.android.com/guide/topics/data/backup.html.Özellikle bu tipik veritabanları için BackupHelper yoktur. Dolayısıyla FileBackupHelper kullandımbenim işaret etti .db dosyasında "/databases/", tanıttı kilitleri etrafında herhangi bir db işlemi (db.insert) benim ContentProviders ve hatta çalıştı oluşturma "/databases/" dizin önce onRestore() çünkü öyle bir yer yok sonra yükleyin.

Geçmişte başarılı bir şekilde farklı bir uygulama SharedPreferences benzer bir çözüm hayata geçirdik. Ancak ben test benim yeni uygulama öykünücüsü-2.2, görüyorum bir yedeği olmaktan gerçekleştirilen LocalTransport günlükler olarak restore ediliyor gerçekleştirilen (ve onRestore() denir).Henüz db asla oluşturulur dosya.

Bu bir yüklemeden sonra, geri sonra app önce ilk lansmanı gerçekleştirildi unutmayın. Bunun dışında benim test stratejisi http://developer.android.com/guide/topics/data/backup.html#Testing dayanıyordu.

Lütfen kendimi yönetmek Bazı sqlite veritabanı bahsetmiyorum ayrıca not, ne de SDcard yedekleme hakkında, sunucu ya da başka bir yerde.

Veritabanları BackupAgent ama ile ilgili görünmüyor bir özel kullanım için danışmanlık ile ilgili belgeler bir söz gördüm:

Ancak, uzatmak isteyebilirsiniz BackupAgent eğer ihtiyacınız varsa doğrudan: * Bir veritabanındaki verileri yedekleyin. Eğer bu bir SQLite veritabanı varsa kullanıcı ne zaman geri istiyorum yeniden yükler uygulamanız gerekir özel bir BackupAgent oluşturmak için bu bir sırasında uygun veri okur yedekleme işlemi, daha sonra oluşturmak tablo ve veri sırasında bir Ekle geri yükleme işlemi.

Biraz daha netlik lütfen.

Eğer ben gerçekten kendim için SQL seviyesine kadar gerekiyorsa, o zaman şu konular hakkında endişeleniyorum

  • Açık veritabanları ve işlemler. Benim app, iş dışında böyle bir singleton sınıf onları kapatmak için nasıl hiçbir fikrim yok.

  • Bir yedekleme işlemi kullanıcıya bildirmek için nasıl ve veritabanı kilitli. Uzun bir zaman alabilir, bir ilerleme çubuğu göstermek için ihtiyacım olabilir.

  • Nasıl geri aynı yapmak. Anladığım kadarıyla, kullanıcının uygulamayı kullanarak (ve veritabanına veri girilmesi) başladı an olabilir geri yükleme. Sadece bir yerde backupped verileri (boş veya eski verileri silme) geri tahmin edemezsin. Önemsiz olmayan herhangi bir veritabanı için imkansız olan bir şekilde katılmak için kimlik nedeniyle olacak.

  • Geri yükledikten sonra app yenilemek için nasıl kullanıcı - şimdi - biraz ulaşılmaz noktada sıkışmış almadan yapılır.

  • Veritabanı yedekleme veya geri yükleme yükseltildi emin olabilirim? Aksi halde beklenen şema aynı olmayabilir.

CEVAP
13 HAZİRAN 2011, PAZARTESİ


Sorumu yeniden ziyaret ettikten sonra, how ConnectBot does it baktıktan sonra onu işe almak başardı. Teşekkürler ve Jeffrey Kenny!

Aslında ekleme kadar kolaydır:

FileBackupHelper hosts = new FileBackupHelper(this,
    "../databases/"   HostDatabase.DB_NAME);
addHelper(HostDatabase.DB_NAME, hosts);

senin için 17**.

Eksik olduğum nokta ile göreceli bir yol kullanmak gerekecek olmasıydı "../databases/".

Yine de, bu hiçbir şekilde mükemmel bir çözümdür. FileBackupHelper docs örneğin söz: "FileBackupHelper küçük yapılandırma dosyaları, büyük ikili dosyaları değil, sadece kullanılmalıdır."ikinci SQLite ile bu durumda veritabanları.

Daha fazla öneri için, bize uygun bir çözüm vardır, ne beklenen anlayışlar gibi, ve bu sonu olabilir tavsiye ederim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Diogo Oliveira

    Diogo Olivei

    4 HAZİRAN 2006
  • kndx

    kndx

    11 Mart 2006
  • Michelle Phan

    Michelle Pha

    18 Temmuz 2006