onUpgrade база данных Номер версии Android не увеличивается - PullRequest
3 голосов
/ 24 сентября 2011

Я пытаюсь обновить свою базу данных в приложении для 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 ]

2 голосов
/ 26 сентября 2011

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

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

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

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

0 голосов
/ 21 октября 2011

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

...