2014-12-17 3 views
3

У меня есть приложение, которое находится в сети в игровом магазине. Он поставляется с предустановленной базой данных, которая находится в папке с ресурсами и когда пользователь запускает приложение, db копируется в предпочтительную папку.Обновление предварительно загруженной базы данных с существующими данными

Существует таблица избранных, в которой пользователь хранит закладки/любимые записи.

У меня есть новые данные и несколько других модификаций, которые я сделал с объединенной базой данных, и будет загружать новый APK для воспроизведения магазина.

Я обеспокоен тем, что пользователи, которые в настоящее время используют мое приложение, получат уведомление об обновлении, и после их обновления их приложение будет использовать новую вложенную базу данных, и они потеряют свои записи, хранящиеся в избранных.

Я сделал некоторый поиск google на нем, и SQLiteHelper onUpgrade() работает, когда мы создаем базу данных во время выполнения, но в моем случае это предварительно загруженная в комплекте база данных.

Как я могу сделать резервную копию данных избранного перед обновлением, а затем загрузить ее обратно в новый файл db.

Благодаря

ответ

3

В новых версиях, вы должны сохранить данные таблицы, которые вы хотите сохранить. Для этого вы можете:

  1. Сделайте копию старого файла базы данных в резервную копию.
  2. Извлеките новый файл базы данных в рабочий каталог
  3. Открыть дваSQLiteDatabase объектов, один для каждого файла базы данных.
  4. Скопируйте все данные из таблиц, которые вы хотите сохранить.
  5. Удалите резервную копию старого файла, если все было успешным.

На шаге 4 вы не должны даже не нужно кодировать в частности, это может быть сделано для каждой таблицы, например, более или менее, как это (предупреждение, этот код не тестировался):

static void copyTable(SQLiteDatabase source, SQLiteDatabase destination, String tableName) 
{ 
    Cursor c = source.query(tableName, null, null, null, null, null, null); 

    destination.beginTransaction(); 
    try 
    { 
     String[] columns = c.getColumnNames(); 
     ContentValues insertValues = new ContentValues(); 
     while (c.moveToNext()) 
     { 
      insertValues.clear(); 
      for (int i = 0; i < columns.length; i++) 
       insertValues.put(columns[i], c.getString(i)); 

      destination.insert(tableName, null, insertValues); 
     } 

     destination.setTransactionSuccessful(); 
    } 
    finally 
    { 
     destination.endTransaction(); 
    } 

    c.close(); 
} 
+0

Спасибо man u сохранил мою работу – kaibuki

+0

человек, вы прибили его! 10x – gor

Смежные вопросы