Итак, какой смысл в этом коде?
SQLiteOpenHelper является вспомогательным классом, то есть абстрактным и, следовательно, требует подкласса (т.е.он должен быть расширен и не может использоваться самостоятельно).Кроме того, требуется, чтобы методы onCreate и onUpgrade были переопределены подклассом.
О каком контексте мы говорим здесь?
Ему необходим Context , чтобы можно было определить / извлечь имя пакета , которое используется для определения того, где будет расположен файл базы данных.Сам контекст предоставляет информацию о среде приложения (которая включает в себя пакет). Context
И почему мы передаем 'null' для фабрики?
factory , если не ноль, является CursorFactory , которая позволяет обрабатывать (переопределяя методы) посредством SQLiteCursorDriver событий курсора.Редко такие переопределения необходимы, и поэтому обычно используется null , поскольку это указывает на то, что фабрика не должна использоваться.
Поэтому, чтобы исправить ваш код, как минимум должно быть: -
public class DBOpenHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
public DBOpenHelper(Context context) {
super(context,DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Если бы вышеперечисленное было выполнено, результирующая база данных была бы пустой с вашей точки зрения, поскольку таблицы не были определены.2 Таблицы действительно существуют
- таблица SQLite sqlite_master , которая является схемой базы данных
- и специально для Android таблица, называемая android_metadata , который содержит локаль
Метод onCreate автоматически запускается толькоодин раз за время существования базы данных, то есть для ее запуска файл базы данных не должен существовать.Имя файла базы данных будет точно таким же именем, что и имя базы данных (то есть это имя файла).Он будет расположен в / data / data / the_package_name / database / (отсюда и необходимость в Context, поскольку the_package_name будет зависеть от имени пакета).
onUpgrade *Метод 1071 * будет запущен, если 4-й параметр (версия базы данных) больше номера версии, который хранится в базе данных SQLiteOpenHelper (он использует поле userite_version SQLite, которое является частью Заголовок базы данных ).
ПРЕДУПРЕЖДЕНИЕ , если указанная версия базы данных будет ниже, чем в базе данных, если метод onDowngrade не будет перезаписан, приложение завершится сбоем.
Могут быть и другие файлы согласно Временные файлы, используемые SQLite , -journal (до Android Pie) ИЛИ -wal и -shm (из Android Pie)часто будет видно.С Android Pie значение по умолчанию было изменено с journal на wal (ведение журнала записи).
Итак, чтоуказать за этим кодом?(часть 2 / дополнительная)
Вы не ограничены использованием SQLiteOpenHelper.Вы можете открыть (подключить) базу данных SQLite, используя методы SQliteDatabase openDatabase или SQLiteDatabase openOrCreateDatabase .