1.系统自带的许多数据(联系人,本地信息等)保存在sqllite数据库,然后封装成许多ContentProvider来供其他程序访问。
2.对sqllite数据库的操作,可以在命令行通过adb工具登录设备运行sqlite3来操作。
3.ContentProvider 是用URI来标示,访问程序通过URI来访问相应的数据,URI的结构是
content://***/*/*...其中***是授权,在ContentProvider提供程序的说明文件中声明,后面的*表示路径,具体由ContentProvider实现来解释,ContentProvider为简化URI的调用,将这种URI定义为常量字符串供查看和调用。
4.客户端通过URI和需要获取的列,选择条件,排序条件等用相应的api来获取结果,结果是一个android Cursor,可以使用相应的方法获取结果集中的内容,返回的数据是MIME格式,类型/子类型。
5.android内置
http://developer.android.com/reference/android/provider/package-summary.html
6.从Context中获取ContentResolver,然后ContentResolver通过URI 进行AUD ContentProvider操作
7.可以通过managedQuery方法获取一个ContentProvider数据集合(Cursor)然后通过Cursor类的,moveFirst() afterLast() moveNext()来遍历数据,并可以先获取列索引(Cursor.getColumnIndex(columnName)),然后根据索引获取列值(Cursor.getString(ColumnIndex))
8.where子句可以通过URI和参数两种方式,orderby子句可以通过参数,having可以通过参数指定。
9.操作记录时需要一个ContentValues类型,该类型为键值对,键为列名值为需要插入的值。insert操作会返回插入记录的URI
10.将文件添加到ContentProvider中。
10.1通过一个insert操作获取URI
10.1通在URI上使用(ContentResolver.openOutputStream(URI)来让提供程序产生一个内部文件,并将文件名保存在保留列_data上,然后返回这个内部文件的输出流。
11.实现一个ContentProvider的几个步骤
11.1 计划数据库,URI及列名称,创建元数据类来定义所有这些数据元素常量
11.2扩展抽象类ContentProvider
11.3实现方法query,insert,update,delete和getType
11.4在描述文件中注册提供程序。
12 扩展ContentProvider
12.1扩展ContentProvider时需要定义和初始化一个列名称与别名的map,就算没有别名也需要。
12.2用UriMatcher来识别uri
12.3通过扩展SQLiteOpenHelper类来创建数据库,创建表,获取数据库实例。