一.使用添加依賴:
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