什么时候创建SQLite数据库?

时间:2013-08-15 09:28:34

标签: java android sqlite

我在android中学习SQLite数据库,据我所知,我们通常使用下面的模式(参见代码片段),我的理解是

  1. 实例化NoteDbHelpe obj时,构造函数是 调用后,它将检查是否创建了相应的数据库。
  2. 如果没有,请创建数据库并调用onCreate来创建表。
  3. 如果是,请查看我们是否需要升级数据库,如果是,请拨打onUpgrade
  4. 我主要担心的是创建数据库的时候,我认为它应该在构造函数中处理,我的理解是否正确?

        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);
        }
    

2 个答案:

答案 0 :(得分:3)

不,构建帮助程序时,数据库不是。相反,它在首次使用时打开(并在需要时创建)。 documentations对此很清楚:

public SQLiteDatabase getWritableDatabase ()
     

创建和/或打开将用于阅读和的数据库   写作。第一次调用它时,将打开数据库   和onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabase, int, int)   和/或onOpen(SQLiteDatabase)将被调用。

这个原因在课堂概述中:

  

此类使ContentProvider实现更容易推迟   打开和升级数据库直到第一次使用,以避免阻塞   具有长期数据库升级的应用程序启动。

答案 1 :(得分:2)

只需查看source

即可

onCreate来自getDatabaseLocked,来自getWritableDatabasegetReadableDatabase