9

1:1の関係にある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 + "));";
4

3 に答える 3

10

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

詳細については、コンストラクターがサポートしていないときに CursorLoader で結合クエリを使用する方法を参照してください。

于 2013-08-15T01:00:30.227 に答える
2

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

于 2014-03-02T04:28:25.230 に答える
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);

こうする

于 2017-06-21T09:28:07.623 に答える