FinalDB 為 Android orm 框架其中一種,其最大的好處在於能夠一行完成CRUD操作,這也是當初選擇它的原因,但現在年久失修加上一些缺點,不得不另循其他orm框架(Android Room使用紀錄)。
以下紀錄簡單的使用技巧

1.加入專案相依性

1-1.到 https://github.com/yangfuhai/afinal/tree/master/bin 下載jar檔(afinal_0.5_bin.jar)
1-2.將下載的jar檔放到 App module 的 libs 目錄中
1-3.在App module的build.gradle加入

...
dependencies {
    ...
    implementation files('libs/afinal_0.5_bin.jar')
}

 

2.使用方式

2-1.取得DataBase操作實體

FinalDb.create(context, "test.db", true);

回傳的實體即可進行CRUD操作,context為application context實體,test.db為資料庫名稱,true為啟動debug模式,進行CRUD操作會顯示相關訊息。
以下建立FinalDBWrapper來包裝finalDb

public class FinalDBWrapper {
    public static final FinalDb DB_INSTANCE = FinalDb.create(SingletonApplication.getInstance(), "test.db", true);
}

之後只要透過FinalDBWrapper.DB_INSTANCE來操作即可。
2-2.要儲存的類別

import net.tsz.afinal.annotation.sqlite.Id;
import net.tsz.afinal.annotation.sqlite.Table;
@Table(name = "Reminder")
public class Reminder {
  @Id
  private String listNumber;
  private String time;
  private boolean isLaunch;
  private boolean isVibrator;
  private String description;
  public String getListNumber() {
    return listNumber;
  }
  public void setListNumber(String listNumber) {
    this.listNumber = listNumber;
  }
  public String getTime() {
    return time;
  }
  public void setTime(String time) {
    this.time = time;
  }
  public boolean getIsLaunch() {
    return isLaunch;
  }
  public void setIsLaunch(boolean isLaunch) {
    this.isLaunch = isLaunch;
  }
  public String getDescription() {
    return description;
  }
  public void setDescription(String description) {
    this.description = description;
  }
  public boolean getIsVibrator() {
    return isVibrator;
  }
  public void setIsVibrator(boolean vibrator) {
    isVibrator = vibrator;
  }
}

第5行標示資料表名稱。
第8行指定主鍵(不可重複)。
第15~53行為必須有的setter and getter
注意要儲存的類別內無法內嵌另一個自定義類別。e.g.,

public class PatrolReminder {
  ...
  private CustomClass customClass;
}
public class CustomClass{...}

目前似乎還無法這麼做。
2-3. Insert 資料

Reminder reminder = new Reminder();
reminder.setListNumber("0");
FinalDBWrapper.DB_INSTANCE.save(reminder);

第3行插入主鍵為0的reminder,主鍵不可重複。
2-4. Query資料

public static List<Reminder> queryAllReminders() {
    return FinalDBWrapper.DB_INSTANCE.findAll(Reminder.class);
}
public static List<Reminder> queryListNumberEqual20(){
    String searchMessage = " listNumber=\"" + "20" + "\"";
  return  FinalDBWrapper.DB_INSTANCE.findAllByWhere(Reminder.class, searchMessage);
}

第1~3行取得所有已儲存的Reminder
第6~9行取得listNumber 等於20 的 Reminder
2-5. Update資料

  public void update() {
    Reminder reminder = new Reminder();
    reminder.setListNumber("0");
    FinalDBWrapper.DB_INSTANCE.update(reminder);
  }

第3行設定主鍵為0,第4行會以傳入的參數取代已儲存主鍵為0資料。
2-6. Delete資料

  public void delete() {
    Reminder reminder = new Reminder();
    reminder.setListNumber("0");
    FinalDBWrapper.DB_INSTANCE.delete(reminder);
  }

第3行設定主鍵為0,第4行會刪除已儲存主鍵為0資料。