0

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

  1. NoteDbHelpeobj被实例化时,构造函数被调用,它会检查对应的数据库是否被创建。
  2. 如果没有,请创建数据库并调用onCreate创建表。
  3. 如果是,看看我们是否需要升级数据库,如果是,调用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);
    }
4

2 回答 2

3

不,构建助手时不会创建数据库。相反,它在首次使用时被打开(并在需要时创建)。文档对此非常清楚:

public SQLiteDatabase getWritableDatabase ()

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

原因在类概述中:

此类使ContentProvider实现可以轻松地将数据库的打开和升级推迟到第一次使用,以避免因长时间运行的数据库升级而阻塞应用程序启动。

于 2013-08-15T09:35:56.920 回答
2

只看源码

onCreate被调用 from getDatabaseLockedwhich 被调用 fromgetWritableDatabasegetReadableDatabase

于 2013-08-15T09:34:14.673 回答