Android开发从0到1024基础篇(4)DBFlow

来源:互联网 发布:mt6735网络破解 编辑:程序博客网 时间:2024/06/11 21:56

中文链接

一.使用添加依赖:

这里写图片描述

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

原创粉丝点击