数据库是如何创建的?
我正在制作一个数据库应用程序,并且我的程序能够正常工作,并且我已经了解了我一直遵循的大部分教程。 但是,我仍然不清楚一个方面。
有一个扩展SQLiteOpenHelper的MyDBHelper内部类。 外部变量包括名为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数据库? 我没有将任何数据库传递给该方法。 我的SQLiteDatabase数据库变量如何从外部类设置为创建的数据库? 有人可以通过这个像白痴一样谈论我吗?
onCreate()
和onUpgrade()
方法实际上是在创建Db时第一次调用。 事实上,它是在getReadableDatabase() or getWritebleDatabase()
方法中SQLiteOpenHelper
。 它会检查数据库中是否已经存在数据库,它的版本是什么。 据此,它会调用onCreate(), or onUpgrade()
。 或者没有,如果db文件存在并且版本正确。
你可以搜索你的代码来执行myDBHelper.getReadable(Writable)Database()
。 这是执行此项检查的时间。
请让我知道是否需要更多细节。 祝你好运
请记住,你正在扩展SQLiteOpenHelper,所有的魔法都发生在这个超类中,特别是当你调用getReadableDatabase()
或getWritableDatabase()
时,数据库最初被创建(或重新打开getWritableDatabase()
。 这两种方法:
SQLiteDatabase db
变量(和控制通过db
到您的回调方法) onCreate(db)
方法或打开现有数据库来初始化db
onUpgrade(db)
或onDowngrade(db)
他们还会调用一些更多的回调方法,如onConfigure(db)
, onOpen(db)
等(阅读关于这些方法的更多信息。)如果它有帮助,您可以自己通读源代码,以了解如何以及何时所有这一切发生。
onCreate()方法不是这个类的构造函数。 在创建数据库时调用onCreate。
这里PeopleDB扩展了SQLiteOpenHelper。 此代码来自不同的类,并且在getWritableDatabase()或getReadableDatabase()时调用onCreate,或者调用任何类
PeopleDB db = null; //onCreate NOT called here
db=new PeopleDB(getContext());
db.getWritableDatabase(); //onCreate is called here!
希望有所帮助。
链接地址: http://www.djcxy.com/p/42621.html