Android開發從0到1024基礎篇(4)DBFlow

中文鏈接

一.使用添加依賴:

這裏寫圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章