sparrowlhl

Android开源的数据库框架

  平常进行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

四、总结 

  以上简述了三种常用的数据库框架,但无论哪种,只是工具罢了,熟悉数据库操作的原理才是重点,万变不离其宗!

分类:

技术点:

相关文章: