java - SQLiteOpenHelper - 数据库是如何创建的?

标签 java android database sqlite sqliteopenhelper

我正在制作一个数据库应用程序,我的程序可以运行,而且我已经理解了我一直遵循的大部分教程。然而,有一方面我还不清楚。

MyDBHelper 有一个扩展 SQLiteOpenHelper 的内部类。 外部 变量包括名为 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 数据库的?我没有将任何数据库传递给该方法。 outer 类中的 SQLiteDatabase db 变量如何设置为创建的数据库?有人能像个白痴一样跟我讲这个吗?

最佳答案

onCreate()onUpgrade() 方法实际上是在创建 Db 时第一次调用。 事实上,它是在 SQLiteOpenHelpergetReadableDatabase() 或 getWritebleDatabase() 方法中检查的。它将检查数据库是否已存在于数据目录中以及它的版本是什么。根据这一点,它将调用 onCreate() 或 onUpgrade()。或者什么都没有,如果 db 文件存在并且版本正确。

您可以搜索执行 myDBHelper.getReadable(Writable)Database() 的代码。也就是执行此检查的时间。

如果需要更多详细信息,请告诉我。祝你好运

关于java - SQLiteOpenHelper - 数据库是如何创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253636/

相关文章:

java - 如何访问 Par.Do 转换中的管道选项?

android - 如何通过twitter的Fabric API获取用户数据(Android)

android - 我可以作为开发人员测试我的应用程序而不被推特列入白名单吗

php - Laravel 多层 Eloquent 关系

java - Wicket - 在 wicket 表中动态添加列

java - 将 EditText 过滤器设置为自定义范围内的数字

android - 动画相对布局以像 Snack Bar 一样向下/向上移动

php - 使用禁用的文本框将信息上传到数据库

mysql - 保存不同数据的密码(phpMyAdmin 数据库)

java - socket.io 的最佳 Java 服务器实现