我在android中学习SQLite数据库,据我所知,我们通常使用下面的模式(参见代码片段),我的理解是
NoteDbHelpe
obj时,构造函数是
调用后,它将检查是否创建了相应的数据库。 onCreate
来创建表。 onUpgrade
。我主要担心的是创建数据库的时候,我认为它应该在构造函数中处理,我的理解是否正确?
public class NoteDbHelper extends SQLiteOpenHelper{
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "notes_db";
public NoteDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
String createNoteTableSql = "CREATE TABLE ...";
db.execSQL(createNoteTableSql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + NOTE_TABLE_NAME);
// Create tables again
onCreate(db);
}
答案 0 :(得分:3)
不,构建帮助程序时,数据库不是。相反,它在首次使用时打开(并在需要时创建)。 documentations对此很清楚:
public SQLiteDatabase getWritableDatabase ()
创建和/或打开将用于阅读和的数据库 写作。第一次调用它时,将打开数据库 和
onCreate(SQLiteDatabase)
,onUpgrade(SQLiteDatabase, int, int)
和/或onOpen(SQLiteDatabase)
将被调用。
这个原因在课堂概述中:
此类使
ContentProvider
实现更容易推迟 打开和升级数据库直到第一次使用,以避免阻塞 具有长期数据库升级的应用程序启动。
答案 1 :(得分:2)
只需查看source
即可 onCreate
来自getDatabaseLocked
,来自getWritableDatabase
和getReadableDatabase
。