Database层和ContentProvider层整理

来源:互联网 发布:网络谩骂是否可以报警 编辑:程序博客网 时间:2024/04/28 04:19
概略

     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的极好示例,不过并非简单,看得头晕


原创粉丝点击