2012-06-07 2 views
1

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

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if(newVersion>oldVersion) { 
     InputStream inputStream = null; 
     OutputStream outStream = null; 
     String dbFilePath = DATABASE_PATH + DATABASE_NAME; 
     try { 
      inputStream = myContext.getAssets().open("questions.db"); 
      outStream = new FileOutputStream(dbFilePath); 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = inputStream.read(buffer))>0) { 
       outStream.write(buffer, 0, length); 
      } 

      outStream.flush(); 
      outStream.close(); 
      inputStream.close(); 

     } catch(IOException e) { 
      throw new Error("problem copying database from resource file"); 
     } 
    } 
} 

То, что я не уверен в том, как сохранить, была ли попытка вопрос (и предотвратить что от перезаписывания при обновлении). Кажется, мои варианты:

1) Сохранить булевы разделяемые предпочтения для каждого вопрос идентификатора (потенциально МНОГО sharedprefs)

2) Создайте отдельную базу данных для хранения данных, по которым вопросы даны ответов (кажется как избыточны)

3) Храните данные результаты в отдельной таблице тех же базы данных, а затем убедитесь, что только таблица вопросов, перезаписывается при обновлении

4) Храните данные пользователя в отдельном столбце в пределах таблицу вопросов, но не перезаписывайте этот столбец.

Из вышеперечисленного 4 кажется самым элегантным (хотя и не уверенным, если возможно). Каков наилучший способ обойти это (и если это вариант 3 или 4, как мне изменить код?)

Очень ценим!

+0

Можете ли вы подчеркнуть свою проблему? pleeeeeeeeeez –

+0

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

+0

Вы ищете это? http://stackoverflow.com/questions/9109438/using-already-created-database-with-android/9109728#9109728 –

ответ

0

Если вы хотите сохранить данные в старой базе данных, используйте SQL для разбора/чтения ваших записей для обеих баз данных. Вставьте только новые вопросы в свою старую базу данных, таким образом, получение новой базы данных приведет все данные через инструкцию «ВСТАВИТЬ ИЛИ ОБНОВИТЬ».

0

no way! из-за структуры базы данных SQLite вы не можете изменить свой файл самостоятельно

но, возможно, вы должны альтернатива:

  1. читать все базы данных, изменить таблицу желание затем записать его.
  2. хранить ваш новый перезаписываемый стол отдельно. (это решение является фиктивным, я знаю)
Смежные вопросы