2013-06-24 6 views
4

У меня есть андроид приложение, которое использует Sqlite в database.It имеет следующие таблицы:Обновление базы данных Sqlite в android?

  1. Отели
  2. Locations
  3. избранное

Я держу необработанный файл базы данных в папке assests и когда пользователь устанавливает мое приложение, я просто копирую эту базу данных в каталог/data/data/package_name/databases. Обычно таблица Favorites пуста, и она заселяется после того, как пользователь начинает симпатизировать гостиницам. Моя проблема в том, что я хочу запустить свой u обновленную версию приложения с некоторыми исправлениями ошибок и некоторыми новыми отелями, добавленными в базу данных, поэтому мне нужно обновить базу данных существующих пользователей новыми отелями и местоположениями, не затрагивая таблицу избранных. Теперь, если я сохраню свой старый подход и обнов номер версии базы данных то приложение удалит старую базу данных и использует новую базу данных, но все данные в таблице избранных будут потеряны. Я не хочу, чтобы это произошло. Теперь проблема заключается в том, как обновлять таблицу Hotels и Locations без потери данных в таблице «Избранное».

ответ

1
  1. Перед обновлением напишите содержимое предыдущей таблицы в файл и сохраните ее на SD-карте.

  2. Тогда вы можете обновить свою базу данных новой версией.

  3. И после этого копируйте данные из файла резервной копии (с SD-карты) в обновленную базу данных. После успешного копирования резервной копии удалите файл с SD-карты.

+0

На первом этапе вы хотите скопировать данные таблицы избранного в sdcard. К какому формату я должен скопировать эти данные? – user818455

+1

@ user818455, который зависит от вас. Вы можете написать в формате json или любом другом, который подходит вашей цели. Текстовый файл также является опцией. Но я бы предпочел json (или, может быть, xml). *** Json рекомендуется – 7bluephoenix

+0

Спасибо за ответ – user818455

0

Обычно обновление базы данных должно выполняться с помощью класса SQLiteOpenHelper. Я бы посоветовал вам сделать некоторые тесты на своем собственном устройстве, прежде чем публиковать его. Вам необходимо увеличить вашу версию базы данных и вызвать метод «ALTER TABLE» из sqlite. Это обсуждались во многих нитях здесь, ярчайшие один я думаю, что это одна:

Difficulty in upgrading SQlite table

и здесь даже статья с некоторым решением:

http://joshhendo.blogspot.de/2012/03/android-sqlite-database-upgrade.html

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

2

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

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     //code to keep table data 
     List<obj> objList = new ArrayList<obj>(); 

    String selectQuery = "SELECT score,list_name,quiz_length FROM obj_table"; 

    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      obj o = new obj(); 
      o.final_score = cursor.getInt(0); 
      o.quiz_name = cursor.getString(1); 
      o.quiz_length = cursor.getInt(2); 
      objList.add(o); 
     } while (cursor.moveToNext()); 
    } 

    //done storing data, now upgrade DB from asset file 
    try { 
       //my db file is upgraded here 
     copyDataBase(); 
    } catch (IOException e) { 

    } 

    //now insert our saved table data 
    for (Score obj_rec: objList){ 

      ContentValues values = new ContentValues(); 
      values.put("score", obj_rec.final_score); 
      values.put("list_name", obj_rec.quiz_name); 
      values.put("quiz_length", obj_rec.quiz_length); 

      db.insert("obj_table", null, values); 
    } 
} 
+0

Большое спасибо, он отлично работает –

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