Sahip olduğum yerel veritabanını yedeklemek ve geri yüklemek için BackupAgentHelper
sağlananları kullanarak uyguladım FileBackupHelper
. Bu, genellikle birlikte kullandığınız ContentProviders
ve içinde bulunduğu veritabanıdır /data/data/yourpackage/databases/
.
Bunun yaygın bir durum olduğu düşünülebilir. Ancak dokümanlar ne yapılacağı konusunda net değil: http://developer.android.com/guide/topics/data/backup.html . Bu tipik veritabanları için özel olarak bir şey yoktur BackupHelper
. Bu nedenleFileBackupHelper
, " /databases/
" içindeki .db dosyama işaret ettim, benim içindeki herhangi bir db işleminin (örneğin db.insert
) etrafına kilitler ekledim ContentProviders
ve hatta kurulumdan sonra olmadığı için " /databases/
" dizinini daha önce oluşturmayı denedim onRestore()
.
SharedPreferences
Geçmişte farklı bir uygulamada başarılı bir şekilde benzer bir çözüm uyguladım . Bununla birlikte, yeni uygulamamı emülatör-2.2'de test ettiğimde LocalTransport
, günlüklerden bir yedeklemenin gerçekleştirildiğini ve ayrıca bir geri yüklemenin gerçekleştirildiğini (ve onRestore()
çağrıldığını) görüyorum . Yine de, db dosyasının kendisi asla oluşturulmaz.
Tüm bunların bir yüklemeden sonra ve uygulamanın ilk kez başlatılmasından önce, geri yükleme gerçekleştirildikten sonra olduğunu unutmayın. Bunun dışında test stratejim http://developer.android.com/guide/topics/data/backup.html#Testing'e dayanıyordu .
Lütfen kendim yönettiğim bazı sqlite veritabanlarından veya SD karta, kendi sunucuma veya başka bir yere yedekleme yapmaktan bahsetmediğimi de unutmayın.
Dokümanlarda bir gelenek kullanılmasını tavsiye eden veritabanları hakkında bir söz gördüm, BackupAgent
ancak ilgili görünmüyor:
Ancak, şunlara ihtiyacınız varsa doğrudan BackupAgent'ı genişletmek isteyebilirsiniz: * Bir veritabanındaki verileri yedekleyin. Kullanıcı uygulamanızı yeniden yüklediğinde geri yüklemek istediğiniz bir SQLite veritabanınız varsa, bir yedekleme işlemi sırasında uygun verileri okuyan özel bir BackupAgent oluşturmanız, ardından tablonuzu oluşturmanız ve bir geri yükleme işlemi sırasında verileri eklemeniz gerekir.
Biraz açıklık lütfen.
Bunu gerçekten SQL seviyesine kadar kendim yapmam gerekiyorsa, aşağıdaki konulardan endişeleniyorum:
Açık veritabanları ve işlemler. Onları uygulamamın iş akışı dışında böyle bir tekil sınıftan nasıl kapatacağımı bilmiyorum.
Kullanıcıya bir yedeklemenin devam ettiği ve veritabanının kilitlendiği konusunda nasıl bilgi verilir. Uzun zaman alabilir, bu yüzden bir ilerleme çubuğu göstermem gerekebilir.
Aynısı geri yüklemede nasıl yapılır. Anladığım kadarıyla, geri yükleme tam da kullanıcı uygulamayı kullanmaya başladığında (ve veri tabanına veri girdiğinde) gerçekleşebilir. Dolayısıyla, yedeklenen verileri yerine geri yükleyemezsiniz (boş veya eski verileri silerek). Bir şekilde ona katılmanız gerekecek, bu da önemsiz olmayan herhangi bir veritabanı için id'ler nedeniyle imkansızdır.
Geri yükleme tamamlandıktan sonra, kullanıcıyı - şimdi - erişilemez bir noktada takılıp bırakmadan uygulamanın nasıl yenileneceği.
Veritabanının yedekleme veya geri yükleme sırasında zaten yükseltildiğinden emin olabilir miyim? Aksi takdirde beklenen şema eşleşmeyebilir.