1

Android 開発者の皆様、こんにちは。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 では GROUP BY クエリがサポートされなくなったため、Android 4.03 ではクラッシュします。( 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 パラメータを持つもの。

しかし、2番目のケースで CONTENT_URI または CONTENT_URI のデータベース名から dbHandle を取得する方法がわかりません。

前もって感謝します!

4

1 に答える 1

1

Android で SQL インジェクションを実行しないでください。Google はそのバグを修正します。

GroupBy は ContentProvider で呼び出す必要があります。ContentResolver ではありません。

于 2012-05-03T13:51:33.303 に答える