9

1:1の関係を持つ2つのテーブルがあります。コンテンツプロバイダとカーソルローダーを使用しています。CursorLoader - 2つのテーブルがクエリに参加しますか?

カーソルローダーを使用するにはどうすれば結合クエリを作成できますか?私は何とかrawSqlをコンテンツプロバイダー内でハックすることができますが、カーソルローダーコンストラクターでそれを行う方法は私を超えています。

ありがとうございます!

private static final String CREATE_TABLE_ARTICLES = "create table " 
      + TABLE_ARTICLES + "(" 
      + COLUMN_ARTICLE_ID + " integer primary key autoincrement, " 
      + COLUMN_URL + " text not null unique, " 
      + COLUMN_TITLE + " text not null, " 
      + COLUMN_PRICE + " text not null, " 
      + COLUMN_ADDED + " text not null, " 
      + COLUMN_IMG_URL + " text);"; 

    private static final String CREATE_TABLE_ARTICLE_DETAIL = "create table " 
      + TABLE_ARTICLE_DETAILS + "(" 
      + COLUMN_ARTICLE_DETAIL_ID + " integer primary key autoincrement, " 
      + COLUMN_DESC + " text not null, " 
      + COLUMN_LOCALITY + " text, " 
      + COLUMN_TYPE + " text not null, " 
      + COLUMN_SELLER + " text not null, " 
      + COLUMN_SELLER_PHONE + " text, " 
      + COLUMN_IMAGE_COUNT + " integer default 0, " 
      + COLUMN_ARTICLE + " integer, foreign key (" + COLUMN_ARTICLE + ") references " + TABLE_ARTICLES + "(" + COLUMN_ARTICLE_ID + "));"; 
+0

ように私はあなたが加入行うには、生のSQLを記述する必要があるとしているかなり確信してください。 – Falmarri

+0

カーソルローダーの作成時に生のSQLクエリを書き込む方法は?これらの文字列はパラメータ(投影、選択など)としてのみ受け入れます。 http://developer.android.com/reference/android/content/CursorLoader.html – urSus

答えて

9

実際には、カスタムタスクローダーを使用する必要はありません。 簡単に言えば、1つの解決策は、Uri "content:// AUTHORITY/TableArticlesWithDetail"を作成することです。 コンテンツプロバイダで、そのUriをチェックして、生のSQLを実行して結合を行います。

詳細はhow to use join query in CursorLoader when its constructor does not support itを参照してください。

2

最も簡単な解決策は、テーブルを結合し、Uriを使用してCursorLoaderからビューにアクセスするビューを作成することです。

0
Cursor c = db.query(
    RefuelTable.TABLE_NAME + " , " + ExpenseTable.TABLE_NAME, 
    Utils.concat(RefuelTable.PROJECTION, ExpenseTable.PROJECTION), 
    RefuelTable.EXP_ID + " = " + ExpenseTable.ID + " AND " + RuelTable.ID + " = " + id , 
    null, 
    null, 
    null, 
    null); 

この

関連する問題