簡體   English   中英

在ContentProvider中使用rawQuery是一個好習慣嗎?

[英]Is it a good practice to use rawQuery in 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;
}

這是一種很好的常見做法,在這種情況下非常合適。

我沒有預見到任何問題,我們已在許多應用程序中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM