Content Provider理解
ContentProvider不需要了解数据在内部如何保存,只需要使用一组通用方法操作数据的增删改查。
概述
数据模型
使用前需要知道数据模型,数据模型一般使用二维表表示。
URI用法
Content Provider的浅醉一般是使用content://com.example.ss/dba/001
- content://标准前缀
- com.example.ss authority部分,标识Content Provider
需要在标签provider的元素authorities属性中声明authority
- dba 路径
- 001 请求的(_ID)(前缀有下斜杠),可直接指定ID。
预定义Content Provider
预定义名称 | 功能 |
---|---|
Browser | 读取或者修改标签、浏览历史或者网络搜索 |
CallLog | 查看或者更新通话记录 |
Contacts | 获取、修改或者保存联系人信息 |
LiveFolders | Content Provider提供内容的特定文件夹 |
MediaStore | 访问声音、视频和图片 |
Setting | 查看和获取蓝牙设置、铃声或其他设备 |
UserDictionary | 预测文本输入时,提供定义单词给输入法。应用程序和输入法都可以增加数据到该字典 |
数据操作
ContentResolver cr= getContentResolver();
ContentResolver 操作ContentProvider
操作有:
1. insert
增加记录
在ContentValues对象中建立键值对映射,每个键匹配Content Provider中的列名,每个值该列希望增加的值。
调用ContentResolver.insert();
//传递URI和ContentValues映射。
增加新值
疑问点:
当记录已经存在,可以增加新信息或者修改存在信息。
byte数组作为参数,使用ContentValues.put();
存储类型 | 数据量 | 使用方法 |
---|---|---|
小图标的图片、短音频片段 | 少量二进制数据 | byte数组作为参数,使用ContentValues.put() |
图片或者音频、视频 | 大量二进制数据 | 保存代表数据的content:URI到表格,使用文件URI调用ContentResolver.openOutputStream() |
2. delete
ContentResolver.delete();
//提供删除记录类型的URI和一个SQL Where语句
不懂SQL Where,看后面补充SQL基础知识
3. update
ContentResolver.update();
//提供列名和值
4. query
查询数据
需要提供:URI、查询数据字段名称和字段中的数据类型
两种使用相同的参数,返回值为Cursor对象
Cursor对象能向前或向后遍历整个结果集
- ContentResolver.query();
- Activity.managedQuery();
辅助方法
增加ID值到URI
- ContentUris.withAppendedID()
- Uris.withAppendedPath();
补充SQL基础知识
- SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。 - SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。 SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
Where语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 - 值为数字不带单(双)引号“”‘’
- 字符串需带单(双)引号“”‘’