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()
метод не должен возвращаться нормально - это говорит платформе, что установка базы данных прошла успешно.