他のすべての「SQLiteExceptionnosuchtable」メッセージを読みましたが、私の主張に対する答えが見つかりませんでした。
データベースに複数のテーブルがあるAndroidアプリケーションを作成しています。私はそれを段階的に構築します。最初のテーブルAと、データを追加/編集するためのフォームを作成しました。私はLoaderThrottleandroidサンプルで自分自身にインスピレーションを与えました。それは完璧に機能していました。この後、テーブルAとまったく同じようにテーブルBと、データを追加するためのフォームを作成しました。
次に、テーブルBのフィールドを忘れたのを確認しました。このフィールドを追加して、テーブルBをバージョン2に切り替えようとしました。しかし、多くの問題が発生しました。「ダウングレード」および「アップグレード」エラー...アプリケーションデータを消去し、デバイスからアプリケーションをアンインストールしたため、データベースが削除され、最初の起動時に再作成されました。
しかし今、アプリケーションを起動すると、例外が発生します<< android.database.sqlite.SQLiteException:no such table:A:、whileコンパイル中:SELECT name、_id FROM A WHERE((active = 1))>>? !?
dbHelperがデータベースを作成しないのはなぜですか?そのonCreateメソッドを明示的に呼び出す必要がありますか?データベースのすべてのテーブルに一意のdbHelperが必要ですか、それともテーブルごとに1つのdbHelperが必要ですか(現在持っているもの)?
詳細情報:-マニフェストでは、各テーブルのコンテンツプロバイダーにリンクされた2つのプロバイダーがあります。
編集:これが各テーブルの作成コードです。
表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 "
+ ");");
}
手がかりを事前に感謝します。フローレント