Android 在activity onCreate中读取SQLite表

Android 在activity onCreate中读取SQLite表,android,android-sqlite,Android,Android Sqlite,在我的应用程序中,我想初始化存储在SQLite数据库中的一些数据 但事实证明,当我读取数据库时(当我写入数据库时),并没有调用SQLiteOpenHelper onCreate方法。 当我读取不存在的表的db时,我的应用程序崩溃(如果我之前创建了表,则不会崩溃)。我可以抓住例外,但我觉得不太干净 这是关于SQLiteOpenHelper onCreate方法的正常行为还是我遗漏了什么 下面是activity OnCreate()中调用的初始化函数 private void initialized

在我的应用程序中,我想初始化存储在SQLite数据库中的一些数据

但事实证明,当我读取数据库时(当我写入数据库时),并没有调用SQLiteOpenHelper onCreate方法。 当我读取不存在的表的db时,我的应用程序崩溃(如果我之前创建了表,则不会崩溃)。我可以抓住例外,但我觉得不太干净

这是关于SQLiteOpenHelper onCreate方法的正常行为还是我遗漏了什么

下面是activity OnCreate()中调用的初始化函数

private void initializedblayerlist(){
sqlitedb数据库;
光标光标光标图层;
DbPlayerData DbPlayerData;
db=mGameDbHelper.getReadableDatabase();
//如果PLAYER\u TABLE\u NAME不存在,则以下行会使应用程序崩溃
cursorPlayers=db.query(GameDatabaseOpenHelper.PLAYER\u表\u名称,
GameDatabaseOpenHelper.player_列,null,新字符串[]{},null,null,
无效);
cursorPlayers.moveToFirst();

对于(int j=0;j
在我读取数据库时(在我写入数据库时)不会调用SQLiteOpenHelper onCreate方法。
不应该调用它。
onCreate()
方法仅在对象实例时调用。
当我读取不存在的表的db时,我的应用程序崩溃(如果我之前创建了表,则不会崩溃)
这是否让你感到奇怪?我觉得这很合乎逻辑。我同意调用onCreate函数的事实是有道理的。但我很惊讶,我不能做像读取数据库这样简单的事情而不破坏应用程序。我必须每次读取db时检查表是否存在吗?这对我来说没有多大意义。如果我是如果不使用SQLite,我将始终在init创建表(如果它们不存在),然后再也不会检查是否存在。因此,我没有真正了解整个SQLiteOpenHelp oncreate回调过程逻辑。那么你有什么不同意的?实际上,我很难理解调用oncreate函数的事件。但是最终我的问题来自于我在数据库中添加了一个新表,这似乎是因为我必须删除整个数据库,以便从零开始正确创建。现在我不再有问题了。Thx对于帮助,在调用活动中实例化数据库帮助对象时会调用它(类似于
DataBaseHelper db=newdatabasehelper();
)。这是唯一的调用(例外:如果数据库已升级到更高版本,则在
onUpgrade()方法中调用它)
    private void InitializeDbPlayerList() {
    SQLiteDatabase db;
    Cursor cursorPlayers;
    DbPlayerData dbPlayerData;

    db = mGameDbHelper.getReadableDatabase ();
    // The following line crash the app if PLAYER_TABLE_NAME does not exist
    cursorPlayers=db.query(GameDatabaseOpenHelper.PLAYER_TABLE_NAME,
            GameDatabaseOpenHelper.player_columns, null, new String[] {}, null, null,
            null);      
    cursorPlayers.moveToFirst();
    for(int j=0;j<cursorPlayers.getCount();j++)
    {
        dbPlayerData = new DbPlayerData(cursorPlayers.getString(0),cursorPlayers.getFloat(1),cursorPlayers.getFloat(2),
                cursorPlayers.getInt(3),cursorPlayers.getInt(4));
        mDbPlayerList .add(dbPlayerData);
    }
}