2012-05-03 7 views
1

こんにちはすべてのアンドロイドの開発者! 1つの質問で助けてください。 私はAndroid:CONTENT_URIへのSQLクエリ

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は、BYクエリもうGROUPをサポートしていないので、Androidの4.03で、それがクラッシュしています。 (https://stackoverflow.com/questions/8837544/android-ics-sqlite-error

だから私は、例のコード

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); 

またはGROUPBYパラメータを持っている

SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 
qb.query(db, projectionIn, selection, selectionArgs, groupBy, having, sortOrder) 

で持つURI Contacts.CONTENT_URIに生のSQLクエリを形成することを決定しました。

しかし、私はCONTENT_URIまたはCONTENT_URIのdb名から2番目のケースでdbHandleを取得する方法を理解していません。

ありがとうございました!

答えて

1

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

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

+1

しかし、ここで私はCotentReslover.query(...)を使用している場合ContentProvider.query(...)を取得します。私はdbHandle.rawQuery(...)を使用する必要がありますが、私はdbHandleを取得する方法がわかりません – Vitaly

関連する問題