getWritableDatabase вызывается рекурсивно - PullRequest
6 голосов
/ 06 февраля 2012

Я пытаюсь обновить таблицу базы данных следующим кодом:

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

        String query = "ALTER TABLE names ADD COLUMN hidden integer default 0";
        dbHelper.getWritableDatabase().rawQuery(query, null);

    }

Однако, когда я запускаю приложение и оно пытается обновить базу данных, я получаю следующее исключение:

    ...Caused by: java.lang.IllegalStateException: getWritableDatabase called recursively

Кто-нибудь знает, как я могу обойти эту проблему и что именно вызывает ее?

Спасибо

1 Ответ

23 голосов
/ 06 февраля 2012

Не звоните getWritableDatabase(). Используйте тот, который передан в:

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

    String query = "ALTER TABLE names ADD COLUMN hidden integer default 0";
    db.rawQuery(query, null);

}

Почему? Когда вы звоните getWritableDatabase(), OpenHelper обнаруживает, что база данных должна быть обновлена, поэтому он запускает предупреждение о рекурсии, которое вы видите. Другими словами, вы в onUpgrade(). Вы звоните getWritableDatabase(), который видит, что обновление необходимо. Если бы не чек, вы бы вернулись обратно к onUpgrade() до бесконечности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...