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資料。