ContentProvider.Query 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
| 名称 | 说明 |
|---|---|
| Query(Uri, String[], String, String[], String) |
实现此操作以处理来自客户端的查询请求。 |
| Query(Uri, String[], String, String[], String, CancellationSignal) |
实现此操作以处理客户端发出的查询请求,并支持取消。 |
| Query(Uri, String[], Bundle, CancellationSignal) |
实现此实现以处理将参数打包到某个 |
Query(Uri, String[], String, String[], String)
实现此操作以处理来自客户端的查询请求。
[Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Handler")]
public abstract Android.Database.ICursor? Query(Android.Net.Uri uri, string[]? projection, string? selection, string[]? selectionArgs, string? sortOrder);
[<Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Handler")>]
abstract member Query : Android.Net.Uri * string[] * string * string[] * string -> Android.Database.ICursor
参数
- uri
- Uri
要查询的 URI。 这是客户端发送的完整 URI;如果客户端请求特定记录,URI 将以实现应分析和添加到 WHERE 或 HAVING 子句的记录编号结尾,并指定_id值。
- projection
- String[]
要放入游标中的列的列表。 如果 null 包含所有列。
- selection
- String
筛选行时要应用的选择条件。
如果 null 包含所有行。
- selectionArgs
- String[]
你可以在所选内容中包含 ?s,这将替换为 selectionArgs 中的值,以便它们出现在所选内容中。 这些值将绑定为字符串。
- sortOrder
- String
游标中的行应如何排序。
如果 null 提供程序可以自由定义排序顺序。
返回
游标或 null。
- 属性
注解
实现此操作以处理来自客户端的查询请求。
面向 android.os.Build.VERSION_CODES#O 或更高版本的应用应重写 #query(Uri, String[], Bundle, CancellationSignal) 并提供此方法的存根实现。
可以从多个线程调用此方法,如 进程和线程中所述。
示例客户端调用:
// Request a specific record.
Cursor managedCursor = managedQuery(
ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 2),
projection, // Which columns to return.
null, // WHERE clause.
null, // WHERE clause value substitution
People.NAME + " ASC"); // Sort order.
示例实现:
// SQLiteQueryBuilder is a helper class that creates the
// proper SQL syntax for us.
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
// Guard against SQL injection attacks
qBuilder.setStrict(true);
qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
qBuilder.setStrictColumns(true);
qBuilder.setStrictGrammar(true);
// Set the table we're querying.
qBuilder.setTables(DATABASE_TABLE_NAME);
// If the query ends in a specific record number, we're
// being asked for a specific record, so set the
// WHERE clause in our query.
if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
qBuilder.appendWhere("_id=" + uri.getPathLeafId());
}
// Make the query.
Cursor c = qBuilder.query(mDb,
projection,
selection,
selectionArgs,
groupBy,
having,
sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
适用于
Query(Uri, String[], String, String[], String, CancellationSignal)
实现此操作以处理客户端发出的查询请求,并支持取消。
[Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Landroid_os_CancellationSignal_Handler")]
public virtual Android.Database.ICursor? Query(Android.Net.Uri uri, string[]? projection, string? selection, string[]? selectionArgs, string? sortOrder, Android.OS.CancellationSignal? cancellationSignal);
[<Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Landroid_os_CancellationSignal_Handler")>]
abstract member Query : Android.Net.Uri * string[] * string * string[] * string * Android.OS.CancellationSignal -> Android.Database.ICursor
override this.Query : Android.Net.Uri * string[] * string * string[] * string * Android.OS.CancellationSignal -> Android.Database.ICursor
参数
- uri
- Uri
要查询的 URI。 这是客户端发送的完整 URI;如果客户端请求特定记录,URI 将以实现应分析和添加到 WHERE 或 HAVING 子句的记录编号结尾,并指定_id值。
- projection
- String[]
要放入游标中的列的列表。 如果 null 包含所有列。
- selection
- String
筛选行时要应用的选择条件。
如果 null 包含所有行。
- selectionArgs
- String[]
你可以在所选内容中包含 ?s,这将替换为 selectionArgs 中的值,以便它们出现在所选内容中。 这些值将绑定为字符串。
- sortOrder
- String
游标中的行应如何排序。
如果 null 提供程序可以自由定义排序顺序。
- cancellationSignal
- CancellationSignal
用于取消正在进行的操作的信号,或者 null 如果没有。
如果取消了该操作,则在 android.os.OperationCanceledException 执行查询时将引发。
返回
游标或 null。
- 属性
注解
实现此操作以处理客户端发出的查询请求,并支持取消。
面向 android.os.Build.VERSION_CODES#O 或更高版本的应用应替代 #query(Uri, String[], Bundle, CancellationSignal) 而不是此方法。
可以从多个线程调用此方法,如 进程和线程中所述。
示例客户端调用:
// Request a specific record.
Cursor managedCursor = managedQuery(
ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 2),
projection, // Which columns to return.
null, // WHERE clause.
null, // WHERE clause value substitution
People.NAME + " ASC"); // Sort order.
示例实现:
// SQLiteQueryBuilder is a helper class that creates the
// proper SQL syntax for us.
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
// Guard against SQL injection attacks
qBuilder.setStrict(true);
qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
qBuilder.setStrictColumns(true);
qBuilder.setStrictGrammar(true);
// Set the table we're querying.
qBuilder.setTables(DATABASE_TABLE_NAME);
// If the query ends in a specific record number, we're
// being asked for a specific record, so set the
// WHERE clause in our query.
if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
qBuilder.appendWhere("_id=" + uri.getPathLeafId());
}
// Make the query.
Cursor c = qBuilder.query(mDb,
projection,
selection,
selectionArgs,
groupBy,
having,
sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
如果实现此方法,则还必须实现该版本的 #query(Uri, String[], String, String[], String) 取消信号,以确保对较旧版本的 Android Framework 执行正确的操作,其中取消信号重载不可用。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
适用于
Query(Uri, String[], Bundle, CancellationSignal)
实现此实现以处理将参数打包到某个 Bundle位置的查询请求。
[Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Landroid_os_Bundle_Landroid_os_CancellationSignal_Handler", ApiSince=26)]
public virtual Android.Database.ICursor? Query(Android.Net.Uri uri, string[]? projection, Android.OS.Bundle? queryArgs, Android.OS.CancellationSignal? cancellationSignal);
[<Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Landroid_os_Bundle_Landroid_os_CancellationSignal_Handler", ApiSince=26)>]
abstract member Query : Android.Net.Uri * string[] * Android.OS.Bundle * Android.OS.CancellationSignal -> Android.Database.ICursor
override this.Query : Android.Net.Uri * string[] * Android.OS.Bundle * Android.OS.CancellationSignal -> Android.Database.ICursor
参数
- uri
- Uri
要查询的 URI。 这是客户端发送的完整 URI。
- projection
- String[]
要放入游标中的列的列表。
如果 null 提供默认的列集。
- queryArgs
- Bundle
包含操作所需的其他信息的捆绑包。 参数可能包括 SQL 样式参数,例如 ContentResolver#QUERY_ARG_SQL_LIMIT,但请注意,每个提供程序的文档将指示它们支持的参数。
- cancellationSignal
- CancellationSignal
用于取消正在进行的操作的信号,或 null。
返回
游标或 null。
- 属性
注解
实现此实现以处理将参数打包到某个 Bundle位置的查询请求。 参数可能包括传统的 SQL 样式查询参数。 当存在时,应根据在内 #query(Uri, String[], String, String[], String, CancellationSignal)建立的合同处理这些内容。
可以使用以下键在捆绑包中找到传统的 SQL 参数:<li li li>android.content.ContentResolver#QUERY_ARG_SQL_SELECTION<>android.content.ContentResolver#QUERY_ARG_SQL_SELECTION_ARGS<>android.content.ContentResolver#QUERY_ARG_SQL_SORT_ORDER
可以从多个线程调用此方法,如 进程和线程中所述。
示例客户端调用:
// Request 20 records starting at row index 30.
Bundle queryArgs = new Bundle();
queryArgs.putInt(ContentResolver.QUERY_ARG_OFFSET, 30);
queryArgs.putInt(ContentResolver.QUERY_ARG_LIMIT, 20);
Cursor cursor = getContentResolver().query(
contentUri, // Content Uri is specific to individual content providers.
projection, // String[] describing which columns to return.
queryArgs, // Query arguments.
null); // Cancellation signal.
示例实现:
int recordsetSize = 0x1000; // Actual value is implementation specific.
queryArgs = queryArgs != null ? queryArgs : Bundle.EMPTY; // ensure queryArgs is non-null
int offset = queryArgs.getInt(ContentResolver.QUERY_ARG_OFFSET, 0);
int limit = queryArgs.getInt(ContentResolver.QUERY_ARG_LIMIT, Integer.MIN_VALUE);
MatrixCursor c = new MatrixCursor(PROJECTION, limit);
// Calculate the number of items to include in the cursor.
int numItems = MathUtils.constrain(recordsetSize - offset, 0, limit);
// Build the paged result set....
for (int i = offset; i < offset + numItems; i++) {
// populate row from your data.
}
Bundle extras = new Bundle();
c.setExtras(extras);
// Any QUERY_ARG_* key may be included if honored.
// In an actual implementation, include only keys that are both present in queryArgs
// and reflected in the Cursor output. For example, if QUERY_ARG_OFFSET were included
// in queryArgs, but was ignored because it contained an invalid value (like –273),
// then QUERY_ARG_OFFSET should be omitted.
extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, new String[] {
ContentResolver.QUERY_ARG_OFFSET,
ContentResolver.QUERY_ARG_LIMIT
});
extras.putInt(ContentResolver.EXTRA_TOTAL_COUNT, recordsetSize);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
请参阅 #query(Uri, String[], String, String[], String, CancellationSignal) 实现详细信息。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。