2012-05-03 2 views
1

Привет всем разработчикам андроидов! Пожалуйста, поможешь с одним вопросом. Я пытаюсьAndroid: sql запрос CONTENT_URI

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)

Так я решить, чтобы сформировать сырой SQL запрос к URI Contacts.CONTENT_URI с примерами кода

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.

Но я не понимаю, как получить dbHandle из CONTENT_URI или db имени CONTENT_URI во втором случае.

Спасибо заранее!

ответ

1

Не делайте SQL-инъекции в Android. Для Google исправить ошибку.

Вызов GroupBy должен быть вызван в ContentProvider. Не ContentResolver.

+1

Но где я получу ContentProvider.query (...), если я использую CotentReslover.query (...). Я должен использовать dbHandle.rawQuery (...), но я не знаю, как получить dbHandle – Vitaly