1

你好每个机器人开发者!请你帮忙回答一个问题。我在尝试

Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,CONTACT_PROJECTION, n" _id = _id ) GROUP BY ("+ Calls.NUMBER, null, "cnt DESC");

它在 Android 2.3.3 中运行良好,但在 Android 4.03 中它崩溃了,因为 Android 4.03 不再支持 GROUP BY 查询。(https://stackoverflow.com/questions/8837544/android-ics-sqlite-error

所以我决定用示例代码对 URI Contacts.CONTENT_URI 形成原始 sql 查询

ContentProviderClient client =  getContentResolver().acquireContentProviderClient(AUTHORITY);
SQLiteDatabase dbHandle= ((MyContentProvider)client.getLocalContentProvider()).getDbHandle();                    
Cursor cursor = dbHandle.rawQuery("SELECT _id, date, duration, number, type, name,   numbertype, COUNT(*) as cnt FROM calls WHERE ( 1=1 ) GROUP BY (number) ORDER BY cnt DESC", null);

或与

SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.query(db, projectionIn, selection, selectionArgs, groupBy, having, sortOrder)

具有 groupBy 参数的。

但我不明白如何在第二种情况下从 CONTENT_URI 或 CONTENT_URI 的数据库名称中获取 dbHandle。

提前致谢!

4

1 回答 1

1

不要在 Android 中进行 SQL 注入。因为谷歌会修复它的错误。

GroupBy 应该在 ContentProvider 中调用。不是 ContentResolver。

于 2012-05-03T13:51:33.303 回答