3


0

onUpgrade база данных Номер версии Android не увеличивается

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

private final static int DB_VERSION = 8;

        public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, DB_VERSION);
        this.myContext = context;
    }
        @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "in onCreate");
        try {
            copyDataBase();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
        myContext.deleteDatabase(DB_NAME);
        Log.d(TAG, "the version is " + db.getVersion());
        db.setVersion(newVersion);
        Log.d(TAG, "the version is " + db.getVersion());
        onCreate(db);
    }

Кто-нибудь знает, почему это происходит?

2 Answer


2


Не пытайтесь вручную установить версию. (Об этом все позаботятся.)

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

Все, что вам нужно сделать в onUpgrade, - это внести необходимые изменения в структуру таблиц. Если вы хотите сделать это, удалив текущие таблицы (НЕ базу данных), а затем воссоздайте их, тогда это нормально.

Если вам необходимо сохранить данные в ваших таблицах, посмотрите на этот вопрос, чтобы узнать, как это сделать: https://stackoverflow.com/questions/3424156/upgrade-sqlite-database-from-one-version-to -прочее [Обновить базу данных SQLite с одной версии на другую?]


0


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