概略
Android系统的数据存储有两个层次,从下到上分别是
持久化数据层:使用SQLite数据库或文件或其他存储方式构成的持久化数据层
抽象数据层:使用ContentProvider封装出来的抽象数据层
持久化数据层(我们这里主要关注使用SQLite数据库的情况)
SQLite所谓的创建数据库其实是创建一张表,而MySQL是先创建一个库,库里面可能多张表
Android系统封装了两个类来帮助使用SQLite
SQLiteOpenHelper,用于创建/打开/升级数据库
这是一个抽象类,需要继承来创建一个自定义类,然后生成自定义类的实例
SQLiteDatabase,这里封装了常用数据库操作,包括intert()/delete()/update()/query()以及直接的SQL语句操作execSQL()
此类的实例通过SQLiteOpenHelper的对象得到
用户需要自定义这个持久化数据层,结构如下
class MyDatabase {
包含SQLiteOpenHelper和SQLiteDatabase
定义各种人性化操作界面
}
以后生成MyDatabase对象即可使用
抽象数据层ContentProvider
这个层次在设计上是非常全面的,功能多得出乎我意料,以下仅是草略看到的
将内部任意数据,包括数据库或文件,封装为对外的统一的数据表
提供全系统寻址的Uri
表和行数据的路由识别,也即在Uri上添加后缀来表示某个表或其中某行
访问权限控制
提供对本地和远端之间的同步适配器的支持
对搜索的支持
操作的原子性
C/S访问,即C是ContentSolver,S是ContentProvider
界面是ContentSolver和ContentProvider之间的界面
提供getType来返回MIME types
在应用之间拷贝和粘贴复杂数据
内容变化监听
很遗憾,由于SQL语句的累赘,无论是持久化数据层还是抽象数据层都没能摆脱SQL复杂语句的阴影,所以完全不懂SQL是不行的
系统自带的CalendarProvider和ContactProvider应该是ContentProvider的极好示例,不过并非简单,看得头晕