Pio*_*ski 22 android android-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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6306 次 |
| 最近记录: |