为了账号安全,请及时绑定邮箱和手机立即绑定

实现Android数据持久化的3种方法与优劣比较

标签:
Android

近日,从事MobIM开发工作。在工作中需要实现本地数据持久化缓存的操作。查看了下当下流行的几款比较受欢迎的开源框架。选取了比较有代表性的(GreenDAO 与Litepal)进行实现和与原生的Sqlite框架进行实现和比较。

   一、GreenDAO的介绍与实现

   1、GreenDAO的优点

  • 性能高,号称Android最快的关系型数据库

  • 内存占用小

  • 库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制

  • 支持数据库加密  greendao支持SQLCipher进行数据库加密

  • 简洁易用的API

    2、最新的GreenDAO的版本为3.2.2。集成方式十分便捷和简单。Javabean就是数据库对象,对JavaBean的操作,直接映射到数据库 上。避免手写建表SQL的繁琐,和手写数据库操作的代码。并且支持各类函数级别的增、删、改、查。

    3、GreenDAO的集成步骤

     1)在Project的build.gradle里添加greendao-gradle-plugin。  

     classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'

          

5b82bed000014f3506400366.jpg

     2)在App的build.gradle里声明引用GreenDAO的 plugin 。  

     apply plugin: 'org.greenrobot.greendao'

 

5b82bed00001944e06400335.jpg

           

     3)引用GreenDAO的工程jar包。   compile 'org.greenrobot:greendao:3.2.0'

            

5b82bed100018c3d06400257.jpg

     4)执行Sync Project with Gradle Files 。根据以上配置,下载和引用GreenDAO的类库。

                  

5b82bed100018a9a05300100.jpg

        5)创建数据库映射的实体类。其中,@Entity 、@Id、@Property 等都是GreenDAO特有的元注解,可以通过标注JavaBean来告诉GreenDAO这是个数据库表,以及表对应的字段名。使用注解的方式来定义实 体类,通过gradle插件生成相应的代码,十分方便 。

 @Entity
 public class User {
            public static final int MAN = 1 ;
            public static final int WOMAN = 0 ;

            @Id(autoincrement = true)
            private Long id;

            //@Unique
   private String name;

            @Property(nameInDb = "db_age")
            private String age;

            private String date;

            private String regdate;

                    .............

          6)标注完成后,再执行下 4)步骤,会自动生成 get、set 方法和构造函数。

                  

5b82bed10001d85a06400525.jpg

         7)针对User类的数据库操作类也已经自动生成了。它就是 UserDao 。获取UserDAO需要用到DaoSession 和DaoMaster。通过以下步骤获取UserDAO。以此类推通过定义 Xyz类的JavaBean就可以自动生成 XyzDao。

           

5b82bed20001d87d06400327.jpg


 了解DaoMaster和DaoSession与XyzDao的关系

                          

5b82bed30001fb8201500272.jpg

 DaoMaster: 使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。 它具有静态方法来创建表或将它们删除。 其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。一个 DaoMaster就代表着一个数据库的连接。

 DaoSession: 管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。 DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。

 XyzDAO:数据访问对象(DAO)持续存在并查询实体。 对于每个实体,GreenDAO生成一个DAO。 它比DaoSession有更多的持久化方法,例如:count,loadAll和insertInTx。

        8) GreenDAO的数据库一般操作。

 5b82bed30001878806400303.jpg

5b82bed3000152e306400401.jpg

                        

二、LitePal的介绍与实现

     1、LitePal的介绍

         LitePal非常小,集成起来非常方便,通过建立JavaBean继承DataSupport的方式,直接使其JavaBean具有了,数据库操作的相关方法。

     2、LitePal的实现

          1)在App的build.gradle里导入LitePal的类库。   compile 'org.litepal.android:core:1.6.0'

               

5b82bed300014c6106400267.jpg

        2)在资源文件夹assets下建立litepal.xml文件。

                

5b82bedd0001762b03070133.jpg

5b82bede0001c05006400537.jpg

                  

      3)建立JavaBean类,并继承DataSupport。

                   

5b82bede0001c5ac05130510.jpg

     4)声明LitePalApplication。    android:name="org.litepal.LitePalApplication"

                     

5b82bede0001098106180305.jpg

 

     5)LitePal的数据库一般操作。

                        

5b82bedf00016a0504610595.jpg

5b82bedf00015f7504570235.jpg

                      

三、Android SQLite原生数据库介绍与实现

     1、Android SQLite原生数据库介绍

         Android才用了小型的关系数据SQLite,占用资源很少。支持各种数据库操作。

     2、Android SQLite原生数据库的实现

        大家对Android 原生数据库的实现应该比较熟悉,这里不再详细赘述,主要指出主要步骤。

         

5b82bedf0001a38e06400338.jpg

5b82bedf0001e66c06400169.jpg

         

5b82bee00001ed2906400370.jpg

5b82bee00001545d06400423.jpg

四、3种数据库实现方式在具体实践中的比较

      在魅族metal手机上的测试结果:执行效率 SQLite原生 > GreenDAO > Litepal

    

5b82bee90001e54c05640133.jpg

五、分析原因与使用方式推荐

     SQLite原生集成虽然费时,但是其中没有封装各类复合查询和各类判断,效率最高。

     GreenDAO开始配置的时候步骤比较繁琐,使用了注解类动态生成操作类,接口函数封装很完善,功能强大,如果不涉及到大规模的数据库操作推荐使用。

      Litepal配置简单,集成速度很快,但是要配置LitepalApplication,有一定侵入式,在一些小型快速的项目上可以推荐使用。


文/Mob开发者平台 Android开发专家 徐化杰

原文链接:http://www.apkbus.com/blog-942559-76875.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消