2012-06-12 2 views
2

Предположим, что у меня есть база данных SQLite, которую я создаю в отдельной программе, и включаю ее в папку с ресурсами, которая будет скопирована при запуске приложения (при условии, что она еще не существует). База данных содержит два столбца: A и B. Предположим, что A содержит список местоположений (Париж, Лондон, Нью-Йорк и т. Д. - вещи, которые пользователь не может редактировать), и B хранит количество раз, когда пользователь посетил соответствующее местоположение (который пользователь может редактировать из приложения).Android SQLite: использование onUpgrade для обновления данных?

Теперь предположим, что мне удалось указать неправильное имя в моей исходной базе данных. Я захожу в свой браузер SQLite, быстро исправляю эту запись, сохраняю ее и заменяю старый файл DB в папке с моими ресурсами. Как обновить столбец А в базе данных, которая уже скопирована, чтобы отразить изменения, внесенные мной в базу данных только для чтения, в папке с ресурсами БЕЗ удаления данных, которые они сохранили?

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

ответ

1

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

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     if (oldVersion < 211) 
     { 
      // In this version we transfer Log data into new date keeping format - just milliseconds, no string formatting 
      db.execSQL("DROP TABLE IF EXISTS " + LogData.TABLE_NAME); 
      db.execSQL(LogData.TABLE_CREATE_SQL); 
      logInformation(db, "Application upgraded to 2.1.1 level and existing log data cleared from device."); 
     } 

     if (oldVersion < 212) 
     { 
     } 

     if (oldVersion < 220) 
     { 
      db.execSQL("DROP TABLE IF EXISTS " + MailData.MAIL_TABLE_NAME); 
     } 
    } 
2

Давайте начнем с самого начала .. При открытии базы данных с помощью конструктора SQLiteOpenHelper он будет получать информацию о версии от вас.

Если база данных не существует, она вызывает метод CreateCreate. Если версия существующей базы данных ниже вашей, она вызывает метод onUpgrade.

Для получения дополнительной информации, пожалуйста, ознакомьтесь с андроидом documentation.

Итак, вы можете вставить исходную информацию в метод onCreate. И вы можете изменить таблицу или вставить дополнительную информацию в свои таблицы в методе onUpgrade.

Надеюсь, что это поможет.

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