数据库是如何创建的?

我正在制作一个数据库应用程序,并且我的程序能够正常工作,并且我已经了解了我一直遵循的大部分教程。 但是,我仍然不清楚一个方面。

有一个扩展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

    上一篇: how is the database created?

    下一篇: getApplication() vs. getApplicationContext()