2012-03-06 7 views
0

私はここで簡単なことをしようとしていますが、データベースとSQLに関する私の知識は最高です。 私はチュートリアルhereに従っていましたが、今では自分のテーブルを作成しようとしています。Android上のSQLiteで単純な結合テーブル

もう少し簡単に説明すると、プロファイルにはウィジェットがあり、ウィジェットは複数のタイプにすることができます。 ウィジェットテーブルには、ID、名前、および文字列widget_typeが含まれています。各ウィジェットタイプに対して、そのウィジェットタイプの別のテーブルがあります。彼らはすべての3つのウィジェットテーブル全体で一意になるように、私はウィジェットの間でIDを共有しているとのトラブルを抱えている

ので

       Profile 
           | 
           | 
           | 
           Widget 
           | 
       |------------------|--------------------| 
      Widget1   Widget2    Widget3 

一部。私は以下のSQLを参照していますが、私が何をしようとしているかが完全にはわかっていない、またはSQLite内で実行できるかどうかはわかりません。

+0

マクロは既にアンドロイドコードで定義されています。私は問題を解決するために彼らが必要だとは思わない – OVERTONE

答えて

0

Urk。 Widget1のIDとWidget2のIDが異なるようにこれを行うのは難しいです。

さらに簡単な方法は、すべてのテーブルをまとめて折り畳むことです。 Peopleアプリケーションをサポートする連絡先プロバイダがこれを行います。 3種類のウィジェットタイプすべてのデータを含むテーブルがあります。ユニークなMIMEタイプで特定のウィジェットタイプの行を区別します。ウィジェットを、そのウィジェットが属するプロファイルの_ID値、そのウィジェットタイプのMIMEタイプ、およびそのデータを持つテーブルに追加して追加します。

この「一般的なウィジェット」テーブルには、任意の種類のウィジェットに必要な最大の列数を指定するのがトリッキーです。任意のウィジェットで同じカラムをいくつか提供し、ウィジェットのタイプによって内容が異なるいくつかの一般的なカラム(DATA1からDATA5など)を提供します。その後、各ウィジェットタイプ例えば

のために型固有の定数を割り当てるウィジェットテーブルのためにあなたは、これらの列名は、その後

private static final String WIDGET1_TYPE = "vnd.example.com/widget1"; 
private static final String WIDGET2_TYPE = "vnd.example.com/widget2"; 
private static final String WIDGET3_TYPE = "vnd.example.com/widget3"; 

private static final String SOME_WIDGET1_COLUMN = "DATA1"; 
private static final String SOME_OTHER_WIDGET2_COLUMN = "DATA2"; 

private static final String _ID = "_ID"; 
private static final String WIDGET_NAME = "name"; 
private static final String WIDGET_TYPE = "MIMEtype"; 

定数を作成したいです

など

MIMEタイプ「vnd.example.com/widget1」の行を取得して「SOME_OTHER_WIDGET2_COLUMN」を使用してカーソルにアクセスしても問題はありませんが、Widget1を使用すると何が起こっているのかを把握するのは簡単ですウィジェット1のカーソルなどの定数

android.providerのすべてのコントラクトクラスが何をしているのか疑問に思ったことがあります。

+0

具体的なクラスごとに1つのテーブルを持つのは同じ問題がありますか? – OVERTONE

+0

ウィジェットクラスをシリアライズするのはどうですか?その後、ウィジェット・テーブルのwidget_typeに基づいて再作成します。それはいくつかの空白といくつかの記入された列を持つよりも良い解決策でしょうか? – OVERTONE

関連する問題