一.使用添加依赖:
Project.build中:
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
maven { url "https://jitpack.io" }
Module build中添加:
apply plugin: 'com.neenbedankt.android-apt'
def dbflow_version = "3.0.0-beta4"
apt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
二.开始使用:
1 初始化DBFlow
2.创建数据库的名称和版本号
(注意:这里的字符串大小写和数据库名称的大小写对应,如SCHOol对应的数据库名称也是SCHOol)
注意:这里的类名即是数据库的表名,也是区分大小写的,且主键默认不是自增长的,并且里边的属性也是却分大小写的对应表中的列名
写一个按钮点击事件:
数据库结构创建完成后,要点击make Project 对应的会在相应文件夹生成所需要的代码,帮我们创建数据库
这个时候点击一次插入按钮,导出android本Demo的数据,内容如下
数据成功插入数据库,为什么我们设置的id为110,但是表里边的id却是1呢,那是因为我们设置了主键自增长,所以你设置id不管用
修改数据
数据插入成功我们想更新数据库列name的”加油”设置成“张三”,我们只需要创建一个Student对象,且保证该对象的主键和表中的主键一致,数据即可替换:(虽然我们插入的id是110,但是表中的主键id是1,所以我们需要把该对象的主键设置为id设置为1,name设置为张三)如图:
红色箭头的NAme变成大写所以数据库的列名也变成NAme
删除数据
只需要根据对一个的主键创建对象即可删除:如图
这里需要说一下,如果没有对应的主键也不会报错,也不会删除,但是,GreenDAO就会报错,使程序崩溃,
小结:
1。注意库 表 列表的大小写和那个字段对应
2。注意主键自增长 你自己再设置主键不管用
3。主键再数据库中是唯一的,如果保存到主键一致的将会覆盖
4。切数据库默认缓存是关闭的
接下来就是查询数据库
query all 查询整张表
List<Student> students = SQLite.select()//获取查询对象
.from(Student.class).queryList();
query Single条件查询单个对象(如果都满足这个条件,从表id小的取出来数据)
Student stu = SQLite.select()//获取查询对象
.from(Student.class)//从那个表查询
.where(Student_Table.id.is(1)).querySingle();//查询条件,id==1的时候,反会单一对象
还有更多的条件方法这里就不再一一列举 ,详细查看官方文档,例如eq(); like();
批量插入数据:
List<Student> stubs = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
Student stub2 = new Student();
stub2.NAme = "wwwww"+i+1;
stub2.id = i+1;
stubs.add(stub2);
}
//实时保存,马上保存
new SaveModelTransaction<>(ProcessModelInfo.withModels(stubs)).onExecute();
//异步保存,使用异步,如果立刻查询可能无法查到结果
TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(stubs)));
数据库升级(添加字段)和APP升级数据迁移
upDataBase :
如果app版本迭代更新,需要新增加表,无需做特别的处理,直接修改AppDatabase的版本号大于原来版本号即可。
如果,需要给老表添加字段那么就需要做更多的工作:(且依赖必须是我上边提供的,否则会出错)
第一步: 修改数据库的版本号
比原来的版本大
第二步:给对应的表添加字段
添加字段
第三步:执行第二步之后,需要build(android studio的build->Make Project),通过apt更新People_Table,接下来编写Migration_2_Student类,命名最好按照Migration+版本号+table名
@Migration(version = 2, database = School.class)
public class Migration_2_Student extends AlterTableMigration<Student> {
public Migration_2_Student(Class<Student> table) {
super(table);
}
@Override
public void onPreMigrate() {
addColumn(SQLiteType.TEXT, Student_Table.email.getNameAlias().getName());
}
}
升级数据库,添加字段完成
原本使用的不是DBFlow 后想使用DBFlow 数据库,当APP版本迭代时候老表数据迁移保存
这个和是否使用那个工具创建无关,只要保证库名一样,表名一样, 列名一样(注意大小写),数据库的版本号大于原来的版本号,老的字段不要删除即可:
最后奉上Demo