Мне нужно сделать запрос к ContactsContract.Data
таблице и значениям в столбце CONTACT_ID
будет отличаться.Отличие CONTACT_ID от ContactsContract.Data
Код:
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: рядом с «GROUP»: синтаксическая ошибка: при компиляции: 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
Наконец, я добавляю инструкцию «group by» сразу после sortOrder, b ut:
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
Можно ли сделать запрос с четким? Может быть, я должен добавить что-то к URI?
Да, я нашел свой вопрос и ваши поиски инъекции GROUP BY. Я нашел это очень интересным :) Слишком жаль, что это взломать, и он был заблокирован :) Однако я ищу общее решение не только для GroupMembership. Он также должен быть перенесен в CommonDataKinds.Phone - я знаю о его CONTENT_FILTER_URI, но мой клиент хочет фильтровать ЛЮБОЙ частью телефонных номеров. – QuickNick
Мне понравился ответ, но я хочу открыть щедрость, потому что этот вопрос не получил достаточного внимания. Может быть, ваш ответ был бы лучшим. – QuickNick