简介
Android持久化技术一章中所保存的数据都只能在当前应用程序中访问,但跨程序数据共享是由Content Provider提供的,譬如说:电话薄、短信、媒体库中的信息。
一、基本用法
- 构建内容URI对象,com.example.app是包名,table是表名,将内容URI字符串解析成URI对象.
Uri uri = Uri.parse("content://com.example.app.provider/table1")
- 利用如下的方法进行查询,查询完之后为cursor对象.
Cursor cursor = getContentResolver().query( uri,
projection, selection, selectionArgs, sortOrder);
query()方法参数 | 对应SQL 部分 | 描述 |
---|---|---|
uri | from table_name | 指定查询某个应用程序下的某一张表 |
projection | select column1, column2 | 指定查询的列名 |
selection | where column = value | 指定 where 的约束条件 |
selectionArgs | - | 为 where 中的占位符提供具体的值 |
orderBy | order by column1, column2 | 指定查询结果的排序方式 |
- 利用如下代码将cursor对象的值一条条读出来。
if (cursor != null) {
while (cursor.moveToNext()) {
String column1 = cursor.getString(cursor.getColumnIndex("column1"));
int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
}
cursor.close();
}
- 增删改(本质一样,就是用法稍微有点区别)
//添加一条("text",1)的数据
ContentValues values = new ContentValues();
values.put("column1", "text");
values.put("column2", 1);
getContentResolver().insert(uri, values);
//将("text",1)数据的第一列设置为
ContentValues values = new ContentValues();
values.put("column1", "");
getContentResolver().update(uri, values, "column1 = ? and column2 = ?", new String[] {"text", "1"});
//将第二列为1的数据删除
getContentResolver().delete(uri, "column2 = ?", new String[] { "1" });