0

私のアプリケーションには、 と の 2 つのデータベース テーブルがProductsありShoppingCardます。だから私は と を作成しましProductContentProviderShoppingCardContentProvider。それぞれのメソッドで、 の子であるプライベート クラスをContentProvider呼び出します。onCreate()SQLiteOpenHelper

  1. 私の観点からは、両方のコンテンツ プロバイダーを担当DATABASE_VERSIONする個別の ConfigBeanにグローバルな静的変数を作成します。したがって、更新すると、すべてのテーブルが更新されます。 =>それは機能しません。単に onUpdate イベントが発生することはありません。

  2. 各コンテンツ プロバイダでa を指定しているDATABASE_VERSIONが、各コンテンツ プロバイダでバージョン番号が異なる
    場合 => 機能しません。また、私の観点からは、パラメータ inSQLiteOpenHelperが not と呼ばれるため、意味がありDATABASE_VERSION ません TABLE_VERSION。つまり、すべてのonUpgradeリスナーでイベントを更新/スローしない限り、テーブルを更新することはできません。

  3. 各コンテンツ プロバイダでを指定するがDATABASE_VERSION、各コンテンツ プロバイダのバージョン番号が等しい場合。
    =>それはうまくいきます。

質問:

アップグレードをグローバルに処理するために public static 変数を外部に作成できないのはなぜですかDATABASE_VERSION、それとも私のアーキテクチャで完全に間違った道を進んでいるのですか?

4

2 に答える 2

1

私の問題の解決策は、両方のコンテンツ プロバイダーへの基本クラスを作成することでした。このクラスは、SQLiteOpenHelper の唯一のインスタンスを保持します。これにより、すべてのデータベース テーブルが確実に作成されます。この情報は、2010 年 11 月 5 日の Ali Serghiniの投稿で見つけました。

于 2011-05-26T08:02:55.987 に答える
0

さて、私は奇妙な振る舞いの理由を見つけました:

複数の ContentProvider がある場合、DATABASE_VERSION を外部パラメーターにするという私のアプローチは正しいと思います。

もう 1 つの ContentProvider があることを忘れていました。設定を保存する単純な ConfigTable です。最終的に、さまざまな DATABASE_VERSION 値が混在していたため、起動ごとにデータベースが再作成されたと思います。

すべての ContentProvider から単一のパラメーターを参照した後、すべてが期待どおりに機能しました。

とにかくありがとう、セバスチャン

于 2011-05-24T13:08:54.610 に答える