2011-07-18 12 views
1

私は現在、データベースクエリの問題に直面しています。私は、次のスキーマ定義を持つ2つのテーブル、アイテム詳細を持っている:ContentProvider.Query - URIを使用していないテーブルを選択するには?

items(_id, title, type)      <--- _id is primary key 
    details(_id, _itemid, name, quantity, dosis) <--- _id is primary key. _itemid is foreign key 

はさらに私は経由して自分のデータベースにアクセスします。私自身のcontentProvider。私の活動では、すべてのタプルを取得するために詳細テーブルを照会したいが、URIを使用してテーブルを「取得する」方法はわからない。私のクエリは次のとおりです。私のContentProviderクラスで

Uri subItems = Uri.parse("content://tod.dosetracker.provider.Food"); 
    Cursor c = getContentResolver().query(
      subItems, 
      new String[] {"*"}, 
      "_itemid = " + _id, 
      null, 
      null); 

私は(抜粋)は以下のいる:

public static final String PROVIDER_NAME = "tod.dosetracker.provider.Food"; 
    public static final Uri CONTENT_URI_ITEMS = Uri.parse("content://" + PROVIDER_NAME + "/items"); 
    public static final Uri CONTENT_URI_DETAILS = Uri.parse("content://" + PROVIDER_NAME + "/details"); 

    public static final String _ID = "_id"; 
    public static final String _ITEMID = "_itemid"; 
    public static final String TITLE = "title"; 
    public static final String TYPE = "type"; 
    public static final String NAME = "name"; 
    public static final String DOSIS = "dosis"; 
    public static final String QUANTITY = "quantity"; 

    private static final int ITEM = 1; 
    private static final int ITEM_ID = 2; 
    private static final int DETAILS = 3; 
    private static final int DETAILS_ID = 4; 

    // URI resource matchers 
    private static final UriMatcher uriMatcher; 
    static { 
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
    uriMatcher.addURI(PROVIDER_NAME, "items", ITEM); 
    uriMatcher.addURI(PROVIDER_NAME, "items/#", ITEM_ID); 
    uriMatcher.addURI(PROVIDER_NAME, "details", DETAILS); 
    uriMatcher.addURI(PROVIDER_NAME, "details/#", DETAILS_ID); 
    } 

    // Database reference name 
    private SQLiteDatabase foodDB; 

答えて

2

あなたは間違ったコンテンツのURIを使用しています。 (あなたがアイテムをしたい場合)

FoodContentProvider.CONTENT_URI_ITEMS 

は、だからあなたのクエリは(あなたがすべての列をしたい場合はああところでちょうどヌルに置く)のようになりますあなたの代わりにあなたの項目のために定義されたものを使用してください。

Uri subItems = Uri.parse("content://tod.dosetracker.provider.Food"); 
    Cursor c = getContentResolver().query(
      CONTENT_URI_ITEMS, 
      null, 
      "_itemid = " + _id, 
      null, 
      null); 
関連する問題