Android 与Contacts contract.Data不同的联系人ID
我需要查询Android 与Contacts contract.Data不同的联系人ID,android,sql,distinct,android-contacts,contactscontract,Android,Sql,Distinct,Android Contacts,Contactscontract,我需要查询联系人合同。联系人ID列中的数据和值将不同(不同) 代码: 首先,我尝试将“DISTINCT”添加到投影中的contacts contract.Data.CONTACT\u ID。但有一个例外:java.lang.IllegalArgumentException:无效的列不同联系人id 然后,我这样写: "'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'". java.lang.IllegalArgumentException: Inval
联系人合同。联系人ID
列中的数据和值将不同(不同)
代码:
首先,我尝试将“DISTINCT
”添加到投影中的contacts contract.Data.CONTACT\u ID
。但有一个例外:java.lang.IllegalArgumentException:无效的列不同联系人id
然后,我这样写:
"'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'".
java.lang.IllegalArgumentException: Invalid column 'DISTINCT contact_id'
然后,我向selectionBuilder添加:
selectionBuilder.append(" GROUP BY ").append(ContactsContract.Data.CONTACT_ID);
再次出现一个异常:android.database.sqlite.SQLiteException:near“GROUP”:语法错误:,编译时:选择联系人id、\u id、显示名称、从视图查找\u数据\u受限数据,其中(1)和(data1=?和mimetype=?按联系人分组\u id)按显示名称ASC排序
最后,我在sortOrder后面添加了“groupby”语句,但是:
android.database.sqlite.SQLiteException: near "GROUP": syntax error: , while compiling: SELECT contact_id, _id, display_name, lookup FROM view_data_restricted data WHERE (1) AND (data1= ? AND mimetype= ? ) ORDER BY display_name ASC GROUP BY contact_id
是否有可能使用distinct进行查询?
也许,我应该在URI中添加一些内容?如果您针对的是ICS下面的设备,您可以使用GROUP_BY子句,在GROUP BY之前添加一个)
,在GROUP BY之后添加一个(
:
selectionBuilder.append(") GROUP BY (")
对于ICS及以上版本,查询解释器更智能,关闭所有未关闭的括号以防止注入
但是,我不明白为什么您需要不同的联系人ID。一个联系人可能只有一个数据才能与一个组建立关联,因此您可能会在每条线路上收到不同的联系人
此外,这可能与它有关,因为它没有文档记录,但考虑到它的位置,它很可能是对属于某个组的联系人的直接访问。您可以使用该Uri:
Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);
然后像联系人一样查询。CONTENT_URI是的,我发现你的问题和你对GROUP BY注入的搜索。我发现它非常有趣:)太遗憾了,这是一个黑客攻击,它被阻止了:)但是,我寻求共同的决定,不仅仅是为了GROUP成员资格。它还必须移植到CommonDataTypes.Phone-我知道它的内容\u FILTER\u URI,但我的客户希望根据电话号码的任何部分进行过滤。我喜欢你的回答,但我想打开bounty,因为这个问题没有得到足够的关注。也许,你的答案是最好的。
Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);