使用数据库
SQlite数据库。
Android数据库的实现峰两个层次。在底层通过C++调用SQlite执行SQL语句,通过JNI向上暴露Java接口。
在框架层,提供Java类库,实现数据库的访问,并控制数据和连接。Android在Java逻辑层通过数据窗口实现对数据库中数据的读取。
应用查询数据时,Android并不会一次性从数据库取出所有数据,而是构建一个数据窗口来实现动态映射部分数据行,将这些数据行从数据库读取出来并放在缓存在上层对象中,如果应用需要的数据正好在窗口的映射范围内,Java逻辑层会立刻从缓存中读取并返回;没有命中则通过JNI接口去数据库实时读取。
数据行的位置会根据范围不断调整,通过后台线程,异步预先从数据库读取,并更新缓存。
数据库的使用
SQliteDatabase表示数据库对象,提供2种模式实现增删改查。
最原始模式
利用SQL语句,调用SQliteDatabase.execSQl或SQliteDatabase.rawquery执行。
Android提倡结构化描述数据。使用ContentValue对象。
支持预编译:SQliteStatement ssh= db.compileStatement(Sql)
Ssh.execute();
支持数据库事物操作。Db.beginTransaction();db.endT ransaction()
为了帮助开发者更好的使用SQliteDatabase,提供了SQliteOpenHelper,封装了SQliteDatabase类。开发者通过SQliteOpenHelper.getReadableDataBase或SQliteOpenHelper.getWriteableDataBase获取SQliteDatabase对象。
并发问题
在Android SQlite底层设计中,对文件读写进行加锁。在开发中要保证同时访问SQliteDatabase的仅有一个。