19

CursorLoaderを介してsqliteデータベースからデータをクエリしようとしています。Android開発者のWebサイトのドキュメントを調べても、制限クエリが見つかりません。

CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

CursorLoaderで制限を実装するにはどうすればよいですか?

前もって感謝します

4

3 に答える 3

29

ハックな方法:

String sortOrder = "ROWID LIMIT 5"

結果としてORDER BY ROWID LIMIT 5ROWIDSQLiteが保持する暗黙の行IDで並べ替えます-並べ替え順序をまったく指定しない場合に発生するものに非常に近いです。これは、注文パラメーターが、指定された値が単に有効な注文タイプであるかどうかをチェックしないという事実を悪用しているわけではありません。一種のバッファオーバーフロー攻撃。

より良い方法は、Uriパラメータを定義することです。

// query code
Uri queryUri = Uri.parse("content://what/ever/items");
queryUri = queryUri.buildUpon().appendQueryParameter("limit", "5").build();

// in ContentProvider
String limit = queryUri.getQueryParameter("limit");

ContentProvider両方のアプローチは、が上記の制限の試みと互換性がある場合にのみ機能します。から特定のデータを制限または選択するための明確に定義された方法は実際にはありませんContentProvider。それぞれContentProviderに独自の契約が付属しているため、上記はすべてのプロバイダーで機能するとは限りません。

于 2012-09-18T11:51:08.317 に答える
1

句を持つ機能を提供するSQLiteQueryBuilderメソッドを使用できますLIMITLIMITまたは、選択文字列に追加することもできます。
また、URIを介して(その一部として)制限を提供し、ContentProviderで処理するオプションがあります。現在、APIを提供していない
ようです。CursorLoader

于 2012-09-18T11:50:50.093 に答える