Android資料庫框架-Archiver(LiteOrm)的使用
轉自:Android資料庫框架-Archiver(LiteOrm)的使用
在Android開發中,大家開發不同專案,不同的專案就不有不同需求。但是不管是什麼專案都會涉及到資料儲存。比如SharePreferences,SQLite,File等方式。但是我最近開發的專案是一個有IM的專案。所以需要用到SQLite,原因是這其中的資料並不是所有資料都是在後臺拉取的。也有需要自己去建立表,和填充資料的功能。下面具體講講我在專案中使用的資料庫和所遇到的資料庫問題。
LiteOrm: LiteOrm是一個速度快、小巧卻強大的android ORM框架類庫,LiteOrm
- 輕量,專注,效能優先,執行緒無關,專注資料及其關係(關係是重點)儲存和讀取。
- 不需要工具輔助,實體不需要無參構造,不需要繁多註解,約定大約配置,一切多餘的,都不需要。
- 使用極致簡約:db.save(u); db.delete(u); db.deleteAll(U.class);
開源專案地址:https://github.com/litesuits/android-lite-orm
作者個人主頁:http://litesuits.com/
我為什麼選擇用LiteOrm的原因:
- 因為我開發的專案是一個IM的專案,當然要允許賬號切換當賬號切換之後上一個使用者對應的資料和下一個使用者對應的資料怎麼區分?這是一個細節上的問題。所以我採用的QQ的做法,一個使用者對應一個數據庫。有些庫寫的也不錯,可是考慮的不周全,一個使用者對應一個數據庫是最好的,但是有些庫沒有考慮進去,但是LiteOrm可以自定義資料庫名字已經目錄。
- 在當我使用其他的庫的時候,報錯了,尼瑪我研究看瞎都沒有看出到底是什麼錯,沒有一個準確的提示告訴我到底是什麼地方錯誤。比如我其中有一個欄位是from,這個是資料庫關鍵字,總是建立不成功,但是那個庫又報一些看不懂錯,根本沒有說倒是是哪錯了。但是在我使用LiteOrm的時候哪裡錯了會明確的告訴你。
- 因為LiteOrm體積小,專一,一個庫只做一件事,是什麼庫就做什麼事情,有些庫什麼功能都有,又是HTTP請求,又是下載圖片,但是我只需要用到其中一個模組而已。
1、建立資料庫:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/**
* 建立資料庫細節 :
* 細節一:每次啟動都會呼叫這個方法,是否會重複建立,或者說怎麼判斷這個資料庫已經存在。
* 回答:盡在第一次建立,開發這不用關心存在否。
*
* 細節二:如果指定目錄建立在SD卡上,解除安裝APP之後,重新安裝,以前的建立的資料庫還存在
* 回答:如果不想這樣,就不要指定建立在SD卡上面,預設建立就在APP裡。解除安裝後資料庫就不存在了
*
* 細節三:建立資料庫有兩種模式,第一種是單一操作沒有級聯關係的,第二種是級聯操作。
* 建立單一操作模式:LiteOrm.newSingleInstance(_activity, DB_NAME);
* 建立級聯操作模式:LiteOrm.newCascadeInstance(_activity, DB_NAME);
*/
public
static
void
createDb(Context _activity,Object userId){
//DB_NAME = Environment.getExternalStorageDirectory().getAbsolutePath()+"/pinme.db";
DB_NAME =
"pinme_"
+ userId.toString() +
".db"
;
liteOrm = LiteOrm.newCascadeInstance(_activity, DB_NAME);
liteOrm.setDebugged(
true
);
}
|
解釋一下建立資料庫Cascade 和 Single 兩種模式的的區別:
LiteOrm是基類,是基礎。有兩個孩子實現:Cascade 和 Single。
如果使用Single,效率最高,只儲存當前Model,簡單的首選。
如果使用Cascade例項,將會無限級聯操作(不會死迴圈),將所有與這個Model相關的實體、關係都儲存下來。 重點介紹下Cascade,舉個例子,一個學校有10個學院(一對多),一個學院10個專業,一個專業10個班級,一個班級10個老師,一個老師10個學生(多對多關係)。只要呼叫cascade.save( school ); 那麼這個學校,以及10 0000個學生 ,和他們的關係,都儲存下來了。 刪除也一樣,都刪了
2、如何建立表:都說了ORM嘛,所以不需要像android原生的程式碼那樣去寫SQL語句去建立。只需要如下建立實體類