我正在制作一个数据库应用程序,我的程序可以运行,而且我已经理解了我一直遵循的大部分教程。然而,有一方面我还不清楚。
MyDBHelper 有一个扩展 SQLiteOpenHelper 的内部类。 外部 变量包括名为 d 的 SQLiteDatabase。 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 数据库的?我没有将任何数据库传递给该方法。 outer 类中的 SQLiteDatabase db 变量如何设置为创建的数据库?有人能像个白痴一样跟我讲这个吗?
最佳答案
onCreate()
和 onUpgrade()
方法实际上是在创建 Db 时第一次调用。
事实上,它是在 SQLiteOpenHelper
的 getReadableDatabase() 或 getWritebleDatabase()
方法中检查的。它将检查数据库是否已存在于数据目录中以及它的版本是什么。根据这一点,它将调用 onCreate() 或 onUpgrade()
。或者什么都没有,如果 db 文件存在并且版本正确。
您可以搜索执行 myDBHelper.getReadable(Writable)Database()
的代码。也就是执行此检查的时间。
如果需要更多详细信息,请告诉我。祝你好运
关于java - SQLiteOpenHelper - 数据库是如何创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253636/