2014-12-17 5 views
4

Несколько месяцев назад я сделал приложение для Android. Но в то время я не думал, что мне когда-нибудь понадобится сделать резервную копию моей базы данных. Правда в том, что теперь я делаю, но я не реализовал ее.Резервное копирование базы данных Android

Теперь, есть ли в любом случае для меня резервное копирование базы данных, без потери данных? Потому что я думаю, что если я делаю метод для моей резервной копии базы данных, когда я создаю приложение, я потеряю все данные, так как у меня есть этот метод:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + POINTS_TABLE); 
    db.execSQL("DROP TABLE IF EXISTS " + NETWORKS_TABLE); 
    onCreate(db); 
} 
+0

попробуйте это http://stackoverflow.com/a/14686392/1501644 –

+0

Вы изменили схему таблицы точек или таблицы сети? Вы хотите сохранить их? Если вы не изменили схему и не хотите их удалять, вам не нужно их бросать? –

+0

Я думаю, что это было изменено с обновлением Android. – dex90

ответ

0

решение, предлагаемое @yuva ツ работал

Если ваше устройство работает под управлением Android v4 или выше, вы можете вытащить данные приложения, в том числе это база данных, без корня с помощью ADB команды резервного копирования, а затем извлечь резервную копию файл и доступ к базе данных sqlite.

Первую резервную копию данных приложения на ПК через USB-кабель с помощью следующей команды, замените app.package.name фактическим именем пакета приложения.

adb backup -f ~/data.ab -noapk app.package.name Это побудит вас «разблокировать устройство и подтвердить операцию резервного копирования». Не предоставляйте пароль для резервного копирования, поэтому вы можете извлечь его позже. Нажмите кнопку «Восстановить мои данные» на своем устройстве. На экране отобразится название пакета, который вы создаете резервную копию, затем закройте его после успешного завершения.

Результирующий файл data.ab в вашей домашней папке содержит данные приложения в формате резервного копирования android. Чтобы извлечь его, используйте следующую команду:

dd if = data.ab bs = 1 skip = 24 | openssl zlib -d | tar -xvf - Результатом является приложение/app.package.name/папка, содержащая данные приложения, включая базу данных sqlite.

Для получения более подробной информации вы можете проверить original blog post.

1

Копировать дб файл SDCard является одним из способов резервного копирования

public static void copyFileInSDCard() { 

    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     File data = Environment.getDataDirectory(); 

     if (sd.canWrite()) { 
      String DATABASE_NAME = "YOURDBNAME"; 
      String currentDBPath = "//data//your.package//databases//" + DATABASE_NAME; 
      String backupDBPath = "FILE[Name]"; 
      File currentDB = new File (data, currentDBPath); 
      File backupDB = new File (sd, backupDBPath); 

      if (currentDB.exists()) { 
       @SuppressWarnings("resource") 
       FileChannel src = new FileInputStream (currentDB).getChannel(); 
       @SuppressWarnings("resource") 
       FileChannel dst = new FileOutputStream (backupDB).getChannel(); 
       dst.transferFrom (src, 0, src.size()); 
       src.close(); 
       dst.close(); 
      } 
     } 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
Смежные вопросы