Android SQLiteException表示在现有dbhelper时没有这样的表

Android SQLiteException表示在现有dbhelper时没有这样的表,android,android-sqlite,Android,Android Sqlite,我阅读了所有其他“SQLiteException no This table”消息,但没有找到我的观点的答案 我正在创建一个android应用程序,数据库中有多个表。我一步一步地建造它。 我创建了第一个表A和一个用于添加/编辑数据的表单。我用LoaderThrottle android示例激发了自己的灵感。它工作得很好。 在此之后,我创建了表B(与表A完全相同)和一个用于添加数据的表单 然后我发现我忘记了表B中的一个字段。我尝试添加这个字段,并将表B切换到版本2。但是我有很多问题。“降级”和“升

我阅读了所有其他“SQLiteException no This table”消息,但没有找到我的观点的答案

我正在创建一个android应用程序,数据库中有多个表。我一步一步地建造它。 我创建了第一个表A和一个用于添加/编辑数据的表单。我用LoaderThrottle android示例激发了自己的灵感。它工作得很好。 在此之后,我创建了表B(与表A完全相同)和一个用于添加数据的表单

然后我发现我忘记了表B中的一个字段。我尝试添加这个字段,并将表B切换到版本2。但是我有很多问题。“降级”和“升级”错误。。。 所以我删除了应用程序数据并从设备上卸载了应用程序,所以在第一次启动时删除并重新创建了数据库

但是现在,当我启动应用程序时,我有一个例外>

为什么dbHelper不创建数据库?我必须显式调用它的onCreate方法吗? 我需要为数据库的所有表使用唯一的dbHelper,还是为每个表使用一个dbHelper(我现在拥有的)

进一步资料: -在清单中,我有两个提供者,链接到每个表的内容提供者

编辑:下面是每个表的创建代码

表A(我有例外):

表B:

       public void onCreate(SQLiteDatabase db) {
       db.execSQL("CREATE TABLE " + TrackTable.TABLE_NAME + " ("
               + TrackTable._ID                     + " INTEGER PRIMARY KEY, "
               + TrackTable.COLUMN_NAME_DATE        + " long NOT NULL, "
               + TrackTable.COLUMN_NAME_ACTIVITY_ID + " int NOT NULL DEFAULT 0, " 
               + TrackTable.COLUMN_NAME_DAYPART     + " smallint NOT NULL  DEFAULT 0, "
               + TrackTable.COLUMN_NAME_NPQ         + " smallint NOT NULL  DEFAULT 0, " 
               + TrackTable.COLUMN_NAME_NBPID       + " long NOT NULL  DEFAULT 0 " 
               + ");");
   }
提前谢谢你提供任何线索。
弗洛伦特

经过多次尝试,我终于摆脱了困境

我给你我的解决方案,即使我真的不明白为什么我必须这样做。 因为我的问题没有答案,总有一天它会帮助别人

作为提醒,我从LoaderThrottle android示例开始。请参阅此文件

在从SQLiteOpenHelper派生的子类的onCreate方法中,我更改:

db.execSQL("CREATE TABLE " + ...
作者:

然后,在ContentProvider派生的子类的onCreate方法中,我直接调用DbHelper onCreate方法:

     /**
     * Perform provider creation.
     */
    @Override
    public boolean onCreate() {
        mOpenHelper = new ActivityDbHelper(getContext());
        // Assumes that any failures will be reported by a thrown exception.

        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        mOpenHelper.onCreate(db);

        return true;
    }
享受,
Florent

至少需要查看数据库创建代码,才有希望提供答案。请检查这个。我为每个表A和表B添加了创建表代码。user996428,我应该在您的链接中查看什么?问题,答案1,2,3还是4?我不知道为什么人们否决了你的问题,但这正是我的问题,也是我的解决方案。谢谢!
db.execSQL("CREATE TABLE IF NOT EXISTS " + ...
     /**
     * Perform provider creation.
     */
    @Override
    public boolean onCreate() {
        mOpenHelper = new ActivityDbHelper(getContext());
        // Assumes that any failures will be reported by a thrown exception.

        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        mOpenHelper.onCreate(db);

        return true;
    }