Я делаю приложение базы данных, и моя программа работает, и я понял большую часть учебника, за которым я слежу. Однако один аспект остается мне неясным.
Существует внутренний класс MyDBHelper, расширяющий SQLiteOpenHelper. Внешние переменные включают SQLiteDatabase, называемую d. Код для MyDBHelper:
private static class MyDBHelper extends SQLiteOpenHelper {
MyDBHelper(Context c) {
super(c, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(DATABASE_CREATE);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVers, int newVers) {
Log.w(TAG, "Upgrading database from version " + oldVers + " to " + newVers + ", which will destroy all old data.");
db.execSQL("DROP TABLE IF EXISTS GM");
onCreate(db);
}
}
Мой вопрос в том, как это на самом деле создает исходную базу данных. Это происходит в методе onCreate(), но, насколько я вижу, это никогда. Я понимаю, что он вызывается, когда база данных создается впервые, но где? И, кроме того, как это передать SQLiteDatabase db? Я не передал какую-либо базу данных методу. И как моя переменная SQLiteDatabase db из внешнего класса установлена в созданную базу данных? Может ли кто-нибудь рассказать мне об этом, как идиот?