Android обрабатывает обновления приложений и базы данных - PullRequest
10 голосов
/ 14 октября 2010

Я в основном закончил разработку приложения для Android, которое использует базы данных SQLite, которые я копирую в область пользовательских данных на устройстве, например /data/data/com.company.app/databases/users.db

.

Я не уверен, как проходит процедура обновления приложения на торговой площадке, а также не уверен, как я могу ее протестировать.

В настоящее время я проверяю, существует ли база данных на устройстве, и копирую ее, если ее нет (обычно это происходит только при первом запуске). Что произойдет, если в моем обновленном приложении появится новая версия базы данных? Будет ли обновление рынка стирать пользовательские данные, чтобы скопировать мою новую базу данных при следующем запуске?

Что произойдет в будущем, если я внесу изменения в базу данных / добавлю записи / и т. Д. И упакую это в новое приложение? Эта база данных не будет перезаписывать старую базу данных?

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

Если кому-то нужны разъяснения, спросите.

1 Ответ

12 голосов
/ 24 декабря 2010

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

Это мое обновление

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion == 2) {

        System.out.println("Performing upgrade!");
        openDataBase();
        // save the old favorites
        Cursor mCursor = getFavorites();
        ArrayList<Stop> favs = allCursorToStops(mCursor);
        mCursor.close();

        deleteRecreate(db);

        openDataBase();

        for (int i = 0; i < favs.size(); i++)
            setFavorite(favs.get(i));

        close();

    } else {

        deleteRecreate(db);

    }
}

Здесь я проверяюналичие / необходимость обновления и т. д.

    boolean dbExist = checkDataBase();

    if(dbExist){
        // check if we need to upgrade
        openDataBase();
        int cVersion = myDataBase.getVersion();
        close();
        if(cVersion != VERSION)
            onUpgrade(myDataBase, myDataBase.getVersion(), VERSION);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...