Android 的四种数据存储方式:
- SharedPreferences
- SQLLite
- Content Provider
- File
- SharedPreferences
SharedPreferences
它是一种轻量的数据存储方式,本质是基于xml文件存储key-value,通常用来存储一些简单的配置信息。
SharedPreferences对象本身只对获取数据而不支持存储和修改,存储修改是通过Editor对象实现
实现SharedPreferences存储的步骤如下:
- 获取SharedPreferences对象
- 获取SharedPreferences.Editor对象
- 通过Editor接口的putXxx方法保存key-value对其中xxx表示不同的数据类型
- 通过Editor接口的apply(以前commit)方法保存key-value对
|
|
SQLite
SQLite简介
维基定义:
SQLite (英语发音:/ˌɛskjuːɛlˈlaɪt/[2] or 英语发音:/ˈsiːkwəl.laɪt/[3])是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。
SQLite遵守ACID,实现了大多数SQL标准。它使用动态的、弱类型的SQL语法。[4]它作为嵌入式数据库,是应用程序,如网页浏览器,在本地/客户端存储数据的常见选择。它可能是最广泛部署的数据库引擎,因为它正在被一些流行的浏览器、操作系统、嵌入式系统所使用[5]。同时,它有许多程序设计语言的语言绑定。
特点:
- 轻量级 一个动态库、单个文件
- 独立性 没有依赖、无序安装
- 隔离性 全部在一个文件中
- 跨平台
- 多语言接口 支持众多编程语言
- 安全性 事务
事务处理的安全性问题:
- 通过数据库上的独占性和共享锁来实现独立事务处理
- 多个进程可以在同一时间从同一数据库读取数据, 但只有一个可以写入数据。
数据类型
SQLite支持NULL、INTERGER、REAL、TEXT和BLOB数据类型动态数据类型
当某个值插入到数据库时,SQLite将会检查它的类型,如果该类型与关联的列不匹配,SQLite则会尝试将该值转换成该列的类型,如果不能转换,则该值将作为本身的类型存储差异性
- 没有可用于SQLite的网络服务器、只能通过网络共享可能存在文件锁定或者性能问题
- 只是提供数据库级别的锁定
- 没有用户账号的概念,而是根据文件系统确定所有数据库的权限
android中如何使用SQLite
SQLiteDatabase
提供了一些管理SQLite数据库的类,提供创建,删除,执行SQL命令,并执行其他常见的数据库管理任务的方法,每个程序的数据库名字是唯一的。
- ContentValues values = new ContentValues();
- values.put(“name”, “jason”);
- 执行对应的sql操作
|
|
TODO SQLiteOpenHelper
用于管理创建和版本更新
一般是建立一个类的继承它,并重写onCreate()和onUpgrade()方法
getReadableDatabase() 创建或打开一个只读数据库
getWriteableDatabase() 创建或打开一个读写数据库
SQlite 性能优化
技术小黑屋的一篇《Android中SQLite性能优化》写的不错,点击这里
TODO File
TODO ContentProvider
主要作用是进行数据共享,可以是不同进程、应用之间。
如何实现Content Provider?
- 继承抽象类ContentProvider实现一系列针对于数据的增、删、改、查等方法
- 需在AndroidMainfest.xml中完成对ContentProvider的注册
- 获取UriMatcher类
- 使用ContentResolver操作ContentProvider中的数据
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成
使用Activity提供的getContentResolver()方法获取ContentProvider对象
系统提供的ContentProvider
联系人
短信读取
通话记录
多媒体 图像、音视频