【发布时间】:2012-03-09 14:04:57
【问题描述】:
我需要查询ContactsContract.Data 表,CONTACT_ID 列中的值会不同(不同)。
代码:
final Uri uri = ContactsContract.Data.CONTENT_URI;
final String[] projection = new String[] {//
ContactsContract.Data.CONTACT_ID, //
ContactsContract.Data._ID, //
ContactsContract.Data.DISPLAY_NAME,//
ContactsContract.Data.LOOKUP_KEY //
};
final StringBuilder selectionBuilder = new StringBuilder();
selectionBuilder.append(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
selectionBuilder.append("= ? AND ");
selectionBuilder.append(ContactsContract.Data.MIMETYPE);
selectionBuilder.append("= ? ");
final String selection = selectionBuilder.toString();
final String[] selectionArgs = new String[] {//
String.valueOf(groupId), //
ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE //
};
return context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
首先,我尝试在投影中将“DISTINCT”添加到ContactsContract.Data.CONTACT_ID。但是有一个例外:java.lang.IllegalArgumentException: Invalid column DISTINCT contact_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": syntax error: , while compile: SELECT contact_id, _id, display_name, lookup FROM view_data_restricted data WHERE (1) AND (data1= ? AND mimetype= ? GROUP BY contact_id) ORDER BY display_name ASC
最后,我在 sortOrder 之后添加了“group by”语句,但是:
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 上附加一些东西?
【问题讨论】:
标签: android sql distinct android-contacts contactscontract