「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战」
Content Provider简介
ContentProvider属于 Android的四大组件之一。内容提供者是应用程序之间共享数据的接口, Android 系统将这种机制应用到方方面面。ContentProvider 共享数据的好处是统一了数据访问方式。实现进程间的数据交互和共享(跨进程通信)。通过ContentProvider把应用中的数据共享给其他应用访问,它还提供了一套完整的机制,允许一个程序,访问另一个程序中的数据,重要的是能保证被访数据的安全性
ContentProvider的底层是Android的Binder机制。后面的文章中会进行详细的介绍。
URI
通过URI映射来判断需要操作的数据库中的哪张表,URI的用处就是描述路径。如下为标准URI的写法。
Uri uri = Uri.parse("content://com.baipiao.provider/User/1")
URI主要分为四部分:
- schema:Android固定设置为"content://"
- authority:ContentProvider的唯一标识符,一般是程序的包名com.baipiao.provider
- path:指要操作的数据表
- id:通过id可以选择我们需要的那几列
基本使用
查询语句:
Uri uri = Uri.parse("content://com.baipiao.provider/User/1")
Cursor cursor=getContentResolver().query(
uri,
projection,
selection,
selectionArgs,
sortOrder
);
| 参数 | sql语句 | 基本描述 |
|---|---|---|
| uri | from table_name | 查询的表名 |
| projection | select colum1 | 查询的列名 |
| selection | where colum1=value | 查询条件 |
| selectionArgs | - | 查询条件中占位符的具体的值 |
| sortOrder | order by colum1 | 排列方式 |
当查询结束后会返回一个Cursor对象,下面简单了解这是如何读取的
if (cursor != null) {
while (cursor.moveToFirst()) {
String s1=cursor.getString(cursor.getColumnIndex("s1"));
String s2=cursor.getString(cursor.getColumnIndex("s2"));
}
cursor.close();
}
通过移动游标的位置来遍历Cursor集合,读取中每一行中所有列的数据。
增加语句:
ContentValues values=new ContentValues();
values.put("column1","1");
getContentResolver().insert(uri,values);
更新语句:
ContentValues values = new ContentValues();
values.put("column1", "1");
getContentResolver().update(uri, values, "column1=?", new String[]{"2"});
删除语句:
getContentResolver().delete(uri,"column1=?", new String[]{"2"});