1. Query() 与 SQL 查询对比。
| query() 参数 | SELECT 关键字/参数 | 说明 |
|---|---|---|
Uri | FROM table_name | Uri 映射至提供程序中名为 table_name的表。 |
projection | col,col,col,... | projection 是应该为检索到的每个行包含的列的数组。 |
selection | WHERE col =value | selection 会指定选择行的条件。 |
selectionArgs | (没有完全等效项。选择参数会替换选择子句中 ?占位符。) | |
sortOrder | ORDER BYcol,col,... | sortOrder 指定行在返回的 Cursor 中的显示顺序。 |
content://user_dictionary/words:user_dictionary 字符串是提供程序的授权,words 字符串是表的路径。 字符串 content://(架构)始终显示,并将此标识为内容 URI。
3.请求权限:您需要使用<uses-permission>元素和提供程序定义的准确权限名称,在清单文件中指明您需要此权限
4.构建查询:用于指定要检索的行的表达式分割为选择子句和选择参数。 选择子句是逻辑和布尔表达式、列名称和值(变量 mSelectionClause)的组合。 如果您指定了可替换参数 ? 而非值,则查询方法会从选择参数数组(变量 mSelectionArgs)中检索值。
5.防止恶意输入:可使用一个用于将 ? 作为可替换参数的选择子句以及一个单独的选择参数数组。 执行此操作时,用户输入直接受查询约束,而不解释为 SQL 语句的一部分。 由于用户输入未作为 SQL 处理,因此无法注入恶意 SQL。请使用此选择子句,而不要使用串连来包括用户输入
6.将 Intent 发送至具有权限的应用,然后接收回包含“URI”权限的结果 Intent。 这些是特定内容 URI 的权限,将持续至接收该权限的 Activity 结束
本文详细介绍了Android中Content Provider的查询方法query()及其与SQL查询的区别。解析了Content URI的构成和使用方式,如何通过参数设置实现精准的数据检索,并强调了在处理用户输入时预防SQL注入的重要性。

被折叠的 条评论
为什么被折叠?



