平常進行Android數據庫開發時,都是使用原生的API,即SQLiteDatabase。但,使用系統的API開發時,尤其是SQL語句的書寫時經常出現一些問題,因此便出現了許多針對數據庫開發的開源框架,例:LiteOrm、GreenDao、Realm等。本篇文章主要是介紹Android中常用的幾個數據庫框架,以便了解。
聲明:在每個框架前都有對應的原文出處。
一、LiteOrm:
具體參考:https://blog.csdn.net/u014099894/article/details/51586500
一個開源的基於注解的Android數據庫框架。 "Lite Object ralational mapping"---輕量級的對象關系映射。
實際上是對SQLiteDatabase、SQLiteOpenHelper等的封裝,內部使用的還是這些類。
1、操作步驟:
(1)實例化LiteOrm對象:
LiteOrm liteOrm = LiteOrm.newSingleInstance(this, "liteorm-notes"); //或newCascadeInstance()用來支持級聯操作。
(2) 執行增刪改查操作:
liteOrm.insert(note); //Note:針對表的實體類.
說明:Note默認類名為表名,字段名為列名,id(或者_id)屬性為主鍵,但若要自定義表名、列名和主鍵,需要給Note(對象模型Model)加上注解。
注解:@Table @Column @NotNull @PrimaryKey....
2、框架源碼地址:https://github.com/litesuits/android-lite-orm
3、在Android Studio中的使用:由於LiteOrm不支持gradle引入,因此,需要導入jar包的形式使用!
compile files('libs/lite-orm-1.7.0.jar')
(1)項目中,若僅存在一個數據庫,則可將LiteOrm設置為全局單例(Application中創建),否則多次調用會拋出異常"數據庫已經關閉"!
(2)一個實體類只能對應一張表,@Table(...)
4、一個關於LiteOrm使用的例子:https://blog.csdn.net/fengyeNom1/article/details/82996664
二、GreenDao:
原文參看:https://www.jianshu.com/p/53083f782ea2
GreenDao操作的模型(對象模型,即針對數據庫表)是由其代碼生成工具產生的。
優點:支持SQLCiper,數據庫加密,以確保用戶的數據安全。
缺點:太復雜。
1、包含三個核心類:
- DaoMaster:保存數據庫對象(SQLiteDatabase)並管理特定模式的DAO類(而不是對象)。它的內部類OpenHelper和DevOpenHelper是SQLiteOpenHelper實現,它們在SQLite數據庫中創建模式。
- DaoSession:管理特定模式的所有可用DAO對象,您可以使用其中一個getter方法獲取該對象。DaoSession還提供了一些通用的持久性方法,如實體的插入,加載,更新,刷新和刪除。
- XXXDao:數據訪問對象(DAO)持久存在並查詢的實體。對於每個實體,GreenDao生成DAO。
- Entities:可持久化對象。通常,實體對象代表一個數據庫行。
2、操作步驟:以Android Studio為開發工具。
(1)導入Gradle插件和Dao代碼生成,並在代碼中添加相關配置,
- 導入插件:在整個項目的build.gradle中添加配置.
- 配置依賴:在Module:app的build.gradle中添加依賴.
- 配置數據庫相關信息。greendao{ ......}
配置完成后,在AS中Build--->Make Project,重新構建項目,GreenDao集成完成!
(2)創建存儲對象實體類:在類前聲明@Entity注解即可使GreenDao為其生成必要的代碼。例如GreenDao會創建對應的表。
(3)GreenDao初始化:可以在Application中維持一個全局的會話。
private void initGreenDao() { DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "aserbao.db"); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } private DaoSession daoSession; public DaoSession getDaoSession() { return daoSession; }
(4)在項目中實現增刪改查功能。
3、注解:@Entity @Id @Property @NotNull @Transient等。
@Transient:此標記表示不會生成數據庫表的列。即要從持久性中排除的屬性。將它們用於臨時狀態等。或者,您也可以使用Java中的transient關鍵字。
4、GreenDao數據庫加密:通過SQLCiper實現,
(1)首先需要在build.gradle中配置加密庫文件:
implementation 'net.zetetic:android-database-sqlcipher:3.5.6'
(2)修改DaoSession的生成方式:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "aserbao.db"); //SQLiteDatabase db = helper.getWritableDatabase(); //不加密的寫法
Database db = helper.getEncryptedWritableDb("aserbao"); //數據庫加密密碼為“aserbao"的寫法
DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession();
三、Realm:
性能是幾種數據庫框架中最好的。和SQLite不同,它允許在持久層直接和數據對象工作。
缺點:對model類的限制太多,直接導致某些情況下model不能復用,需要重新拷貝一份來單獨處理業務邏輯部分,在機器內存有限的情況下這樣做肯定不 好,不過官方貌似也意識到了。
關於Realm的一些觀點:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1203/3743.html
四、總結
以上簡述了三種常用的數據庫框架,但無論哪種,只是工具罷了,熟悉數據庫操作的原理才是重點,萬變不離其宗!
