SQLite - getDatabase вызывается рекурсивно

Вот мой код:

public class DBHelper extends SQLiteOpenHelper {

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("sql-query");

        try {
            //db = getWritableDatabase();
            fillAllDB(db);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
// some code
}

fillAllDB(db); Метод добавляет запись в таблицу, но я не могу использовать db = getWritableDatabase(); перед вызовом метода - это вызывает зацикливание. Что делать в этом случае?

2 ответа

OnCreate Метод предоставляет только доступную для записи базу данных, поэтому нет необходимости получать доступную для записи базу данных, когда вы вызываете доступную для записи / чтения базу данных, платформа sqlite проверяет, существует ли база данных или нет, если нет, то она вызывает onCreate метод, который почему это рекурсивно, вы не должны вызывать getWritable/getReadable база данных в onCreate/onUpgrade метод SqliteOpenHelper учебный класс

Использовать SQLiteDatabase db аргумент передан вашему onCreate() метод в качестве базы данных для вызова ваших операций.

getWritableDatabase() а также getReadableDatabase() призовет ваш onCreate() если файл базы данных не существует, и вызов get...Database() рекурсивно, пока предыдущий вызов все еще обрабатывается, вызывает это исключение.

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

Другие вопросы по тегам