Android LitePal数据库
前言
当需要管理大量规范数据的时候,数据库是个好东西呀。Android是自带数据库的,叫SQLite,不过用起来太麻烦,需要繁杂的操作并且要自己写SQL语句。所以就会有很多合我们心意第三方库给予帮助,比如今天推荐的LitePal。
LitePal是一款开源的Android数据库框架,采用对象关系映射即ORM模式,封装了常用功能并且很轻量,非常易于使用。
虽然此框架的作者郭霖大佬已经在自己博客里写了相关教程,但由于其第一篇博客教程是在2014年发布的,其中一些内容到现在已经不同了,于是我对其进行整合与编排,“班门弄斧”一下。
教程
配置
添加依赖
1 | dependencies { |
添加配置
在项目assets
文件夹中创建名为litepal.xml
,然后将以下内容写入其中。如果没有此文件夹请手动创建。
1 |
|
这是唯一需要的配置文件,属性如下:
dbname
配置数据库名称,需要以.db
为后缀但如果没有会自动追加version
配置数据库版本,每次数据库结构等变动需将此值加一list
配置映射类,会自动将每个映射类创建对应表storage
配置数据库位置,internal
指在可访问的内部存储数据库目录中、external
指在主外部储存可访问持久目录中
配置Application
如果不想一直传递Context
参数,可以在AndroidManifest.xml
中配置LitePalApplication
,例如:
1 | <manifest> |
如果有独立Application
,可以在自己的Application
中调用初始化方法,例如:
1 | public class MyApplication extends Application { |
开始
创建表
假设需要创建一张记录成绩的表,比如StudentScore
表,那就需要对应的StudentScore
类,并且应该继承自LitePalSupport
类,如下:
1 | public class StudentScore extends LitePalSupport { |
然后,表中每列就对应着表中的一个字段。比如此表中,需要记录姓名、成绩、时间,那么应该有如下类成员:
1 | public class StudentScore extends LitePalSupport { |
其中id
字段可不写,因为会自动生成并将其作为表的主键。
此框架映射规则很轻量,只要是声明的字段是支持的数据类型则都会自动映射且不需要额外配置。支持进行对象关系映射的数据类型如下:
- int
- short
- long
- float
- double
- boolean
- String
- Date
最后,需要将此表类配置到映射列表,即将此类的完整类名加入list
配置中,例如:
1 |
|
这样就完成了,现在只要对数据库有任何操作,此表就会被自动创建。例如如下代码获取SQLiteDatabase
时:
1 | SQLiteDatabase db = LitePal.getDatabase(); |
更新表
首先要修改对应类,例如:
1 | public class StudentScore extends LitePalSupport { |
然后增加litepal.xml
中的版本号即可,例如:
1 | ... |
这些内容将会在下次操作数据库时进行更新。
以下是一些无法处理的更新情况,因此将会删除对应表中的所有数据,请一定要注意:
- 添加一个字段且注解为
unique = true
- 修改一个字段的注解为
unique = true
- 修改一个字段的注解为
nullable = false
插入记录
插入一条记录,例如:
1 | StudentScore scoreTom = new StudentScore(); |
插入多条记录,例如:
1 | List<StudentScore> scoreList = ... |
删除记录
1 | //根据id |
更新记录
1 | //根据id |
查询记录
1 | //单条记录 |
监听数据库
1 | LitePal.registerDatabaseListener(new DatabaseListener() { |
此方法应该在操作任何数据库之前调用,这样才能获得回调。
多数据库
此框架支持创建多个数据库,如下:
1 | LitePalDB litePalDB = new LitePalDB("test2", 1); |
这将会创建一个带有StudentScore
表的名为test2
的数据库。
如果只是创建新数据库但配置与litepal.xml
相同时,如下:
1 | LitePalDB litePalDB = new LitePalDB("test2"); |
通过如下方式切换至默认数据库:
1 | LitePal.useDefault(); |
通过如下方式删除任何数据库:
1 | LitePal.deleteDatabase("test2"); |
事务
此框架支持事务的操作,事务中的所有操作将会一起提交或回滚。
1 | LitePal.beginTransaction(); |
索引
如果要给一个字段添加索引,只需在该字段上方添加对应注解即可,例如:
1 | public class StudentScore extends LitePalSupport { |
请注意,在移动端数据库加索引也许不是个好想法。而如果你对索引已经非常熟悉并且完全清楚自己在做什么的时候,可以使用索引。
聚合函数
count()
此函数用于统计行数,例如:
1 | //普通 |
sum()
此函数用于对结果求和,例如:
1 | int result = LitePal.sum(StudentScore.class, "score", int.class); |
average()
此函数用于统计平均数,例如:
1 | double result = LitePal.average(StudentScore.class, "score"); |
max()
此函数用于计算最大值,例如:
1 | int result = LitePal.max(StudentScore.class, "score", int.class); |
minmin()
此函数用于计算最小值,例如:
1 | int result = LitePal.min(StudentScore.class, "score", int.class); |
参考资料
- Github Readme
- Android数据库高手秘籍(零)——前言
- Android数据库高手秘籍(一)——SQLite命令
- Android数据库高手秘籍(二)——创建表和LitePal的基本用法
- Android数据库高手秘籍(三)——使用LitePal升级表
- Android数据库高手秘籍(四)——使用LitePal建立表关联
- Android数据库高手秘籍(五)——LitePal的存储操作
- Android数据库高手秘籍(六)——LitePal的修改和删除操作
- Android数据库高手秘籍(七)——体验LitePal的查询艺术
- Android数据库高手秘籍(八)——使用LitePal的聚合函数
- Android数据库高手秘籍(九)——赶快使用LitePal 2.0版本吧
- Android数据库高手秘籍(十)——如何在Kotlin中更好地使用LitePal
- Android数据库高手秘籍(十一)——LitePal支持事务功能了
- Android数据库高手秘籍(十二)——LitePal的索引功能