Является ли хорошей практикой использование rawQuery в ContentProvider?

Я использую свой собственный ContentProvider для связи с базой данных sqlite. Я хотел бы отобразить в списке (с помощью ListFragment )данные, поступающие из двух таблиц (с отношением «многие ко многим» ). Единственное решение, которое я могу придумать для такого случая, - это использовать rawQuery. И вопросы в том, является ли это хорошей практикой, или я должен решить это как-то по-другому?

Пример таблиц:

Таблица A :ID, COLUMN _FROM _A

Таблица B :ID, COLUMN _FROM _B

Соединительный стол AB :ID, FK _ID _A, FK _ID _B

Пример переопределенного метода запроса в ContentProvider:

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    Cursor cursor = null;
    int uriType = URIMatcher.match(uri);
    switch (uriType) {
        case TABLE_A_URI:
            queryBuilder.setTables("TABLE_A");
            cursor = queryBuilder.query(databaseHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
            break;
        case TABLE_B_URI:
            queryBuilder.setTables("TABLE_B");
            cursor = queryBuilder.query(databaseHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
            break;
        case TABLE_JOIN_A_B_URI:
             cursor = databaseHelper.getReadableDatabase().rawQuery("select a.COLUMN_FORM_A, b.COLUMN_FROM_B from TABLE_A a, TABLE_B b, TABLE_AB ab where ab.FK_ID_A=a.ID and ab.FK_ID_B=b.ID", null);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI");
    }

    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    return cursor;
}
22
задан Piotr Gorajski 20 July 2012 в 13:53
поделиться