数据持久化:指将那些内存中的瞬时数据保存到存储设备当中,保证即使在手机关机的情况下,数据仍然不会丢失。持久化技术提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换
实现方式:
①文件存储、②SharedPreferences存储、③数据库存储、④内容提供器存储、⑤网络存储
源生的 SQLite 外,也有其他三方框架技术,如: GreenDao、Room、Realm、ORMLite、DBFlow、LitePal 等
SQLite 是一款轻量级的开源嵌入式关系数据库, 它的减少应用程序管理数据的开销,SQLite可移植性好,很容易使用,体积小,高效而且可靠。
优势/点:
- 是一款轻量级的关系型数据库,
- 运算速度非常快,占用资源很少,通常只需要几百KB的内存就足够了,特别适合在移动设备上使用
- 不仅支持标准的SQL语法,还遵循数据库的ACID事务,只要以前使用过关系型数据库,就能很快上手
- 将数据库嵌入到系统当中,成为Android系统的内置数据库,使得本地持久化的功能有了质的飞跃 「 SharedPreferences存储毕竟只适用于简单的数据和键值对,当需要存储大量复杂的关系型数据的时候,这两种存储方式就很难应付了,这时候就需要使用到SQLite数据库。 」
- 适合用于嵌入式设备,程序不需要配置管理
- 可移植性强:能支持在Windows、Linux、Mac OS等软件平台中运行。
- 接口: SQLite为多种语言提供了API接口,所有的应用程序都必须通过接口访问SQLite数据库。
- 「事务例子: 银行会先从你账户中扣除一定的金额,然后再在对方账户中加入相应的金额。这两个步骤要么都成功,要么都不成功,这便是事务的使用场合 」
- SQLite嵌入到应用程序中,共用相同的进程空间,而不是单独的一个进程。有自己数据库引擎。
缺点
- 正如SQLite官方说的它并不适合存储大量数据,一定要控制当中的记录数量。
- SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。
操作
- 继承SQLiteOpenHelper抽象类
- 实现具体的方法:构造方法、onCreate()、onUpgrade()
- getWritableDatabase方法返回SQLiteDatabase对象
- 使用SQLiteDatabase对象,对数据库进行增、删、改、查操作:insert()、delete()、update()、query()。
- Corsor :通过对数据库查询结果集进行随机的访问,查询结果返回点 Corsor 游标」
事务使用步骤
- 1 . 调用 beginTransaction()方法 开启事务「 英 [trænˈzækʃn] 」
- 2 .写有关数据库的操作
- 3 . 当所有操作都成功执行后,使用 setTransactionSuccessful()方法 表示事务执行成功「 英 [səkˈsesfl]」
- 4 . 在 endTransaction 结束事务
greendao
优点
- 存取速度快
- 支持加密
- 轻量、api极简
- 支持缓存
- 中间代码自动生成,代码编写量小
- 开源至今,经历千锤百炼,稳定可靠
操作
- 配置导包
- 注解:
- @Entity 声明当前实体类为greendao实体类,相当于数据库中的表 @Id(autoincrement = true) 设置主键,自增长Id @NotNull 声明该字段在数据库不能为空 NOT NULL
- 编写CRUD工具类
先编写DaoManager,封装数据库的创建、表创建、增删改查,以及数据库的升级等
build project之后,会在目标文件夹,生成DaoMaster、DaoSession、XxxDao中间代码。
DaoMaster保存数据库对象,代表着一个数据库的连接,内部有SQLiteOpenHelper实现
DaoSession 为实体提供了一些通用的持久性方法,如CURD
[表名Dao]数据库表的访问对象,拥有基本的CURD及统计类等高级方法
5. 调用封装的CRUD方法
编写操作封装类XxxDaoHelper,用于完成具体的CRUD、count、条件查询操作、原始sql语句查询等