gpt4 book ai didi

android - 在 ContentProvider 中使用 rawQuery 是一种好习惯吗?

转载 作者:IT老高 更新时间:2023-10-28 23:00:49 26 4
gpt4 key购买 nike

我正在使用我的自定义 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;
}

最佳答案

这是一种很好的常见做法,在这种情况下非常合适。

我没有预见到任何问题,我们已经在很多应用程序中使用了它。

关于android - 在 ContentProvider 中使用 rawQuery 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com