平常进行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
四、总结
以上简述了三种常用的数据库框架,但无论哪种,只是工具罢了,熟悉数据库操作的原理才是重点,万变不离其宗!