我阅读了所有其他“SQLiteException no such table”消息,但没有找到我的观点的答案。
我正在创建一个在数据库中有多个表的 android 应用程序。我一步一步地构建它。我创建了第一个表 A,以及一个用于添加/编辑数据的表单。我用 LoaderThrottle android 示例启发了自己。它工作得很好。在此之后,我创建了与表 A 完全相同的表 B,以及一个用于添加数据的表单。
然后我看到我忘记了表 B 中的一个字段。我试图添加这个字段并将表 B 切换到版本 2。但是我遇到了很多问题。“降级”和“升级”错误......所以我删除了应用程序数据并从设备上卸载了应用程序,因此数据库在首次启动时被删除并重新创建。
但是现在,当我启动应用程序时,出现异常 << android.database.sqlite.SQLiteException: no such table: A: , while compile: SELECT name, _id FROM A WHERE ((active = 1 ))>> ? !?
为什么 dbHelper 不创建数据库?我必须显式调用它的 onCreate 方法吗?我需要为所有数据库表使用唯一的 dbHelper,还是为每个表需要一个 dbHelper(我现在拥有的)?
更多信息: - 在清单中,我有两个提供者,链接到每个表的内容提供者。
编辑:这是每个表的创建代码。
表A(我有例外):
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + ActivityTable.TABLE_NAME + " ("
+ ActivityTable._ID + " INTEGER PRIMARY KEY, "
+ ActivityTable.COLUMN_NAME_TITLE + " TEXT NOT NULL, "
+ ActivityTable.COLUMN_NAME_CODE + " TEXT, "
+ ActivityTable.COLUMN_NAME_ACTIVE + " smallint NOT NULL DEFAULT 1, "
+ ActivityTable.COLUMN_NAME_CPTI + " smallint NOT NULL DEFAULT 1 "
+ ");");
}
表 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 "
+ ");");
}
提前感谢您提供任何线索。弗洛朗