美文网首页
Greendao-增量更新

Greendao-增量更新

作者: XII01 | 来源:发表于2020-04-13 09:56 被阅读0次

在上一篇后,我们的已经完美使用了数据库,我们的数据库也有了数据,但是问题来了新问题,我们在原来的表增加字段,怎么更新呢?
入门篇-GreenDao-初探

 greendao {
        schemaVersion 1 //数据库版本号,更新跟这里有关
        targetGenDir 'src/main/java'
        daoPackage '包名.greendao'
    }

GreenDao默认帮我们处理来升级操作,只需要修改一下schemaVersion版本号(注意这里只能填写比之前大的数,不可以小);
以为完美解决了,我们可以愉快的写代码了,运行代码一看,以前的数据去哪里了(有小动物跑过)
通过查看daoPackage 下面的DaoMaster.DevOpenHelper源码发现

    public static class DevOpenHelper extends OpenHelper {
        public DevOpenHelper(Context context, String name) {
            super(context, name);
        }

        public DevOpenHelper(Context context, String name, CursorFactory factory) {
            super(context, name, factory);
        }

        @Override
        public void onUpgrade(Database db, int oldVersion, int newVersion) {
            Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
            dropAllTables(db, true);
            onCreate(db);
        }
    }

发现每次升级都是把老的数据库删除掉,包括数据,然后再重新创建相关的数据库和表,这样就导致了数据库升级之后数据的丢失.那怎样才能做到不删除老数据呢?

下面轮到主角出场了,MigrationHelper

public class MyDbHelper extends DaoMaster.OpenHelper {

    public MyDbHelper (Context context, String name) {
        this(context, name, null);
    }

    public MyDbHelper (Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        //这段代码会调用父类删除数据库方法,一定注释掉
        //super.onUpgrade(db, oldVersion, newVersion);
  
        if (oldVersion < newVersion) {
            //处理需要更新的表
            Class[] classes = null;
            if (classes != null) {
                MigrationHelper.migrate(db, classes);
            }
        }
    }


}

如上代码,我们自己继承自 DaoMaster.OpenHelper,调用自己的升级方法,通过oldVersion < newVersion去更新需要更新的表,注意点看代码。
这里遇到过一个大坑,在这里分享一下,就是开发了几个版本没有发版,导致老版本更新的时候,中间的版本没有更新到位,如果你也遇到这样的问题,将更新的表放到最后一个即可,我这里的做法是一个循环去更新,如果你有更好的发现,请分享一下,共同进步.
下一篇数据库加密相关

相关文章

  • Greendao-增量更新

    在上一篇后,我们的已经完美使用了数据库,我们的数据库也有了数据,但是问题来了新问题,我们在原来的表增加字段,怎么更...

  • ReactNative 增量热更新思路

    增量热更新 ReactNative 增量更新 ReactNative 增量更新的内容包含 JS 和图片,在每次应用...

  • android 增量更新

    android增量更新 android 4.1开始 google引入了应用程序的增量更新。增量更新的原理实际上是使...

  • 一、NDK:增量更新

    增量更新在Android开发中是一种很常见的技术。 增量更新的原理 增量更新的原理非常简单,就是将本地apk与服务...

  • ReactNative热更新&拆包

    目录 1)全量热更新-Android 2)拆包增量更新-Android 3)图片增量更新-Android 4)全量...

  • 手把手玩Android 增量更新

    前言: 增量更新已经出来几年了,而一些大的公司早就实现了增量更新。增量更新相较于全量更新的好处不言而喻,利用差分算...

  • 增量更新

    搭建ndk+cmake环境setting中system settings->android sdk->sdk t...

  • 增量更新

    思路 通过bsdiff库对new_apk和old_apk进行二进制对比,然后抽取差异化生成new_old.patc...

  • 增量更新

    差分(服务端需要做) 旧版本apk、新版本apkBsDiff开源项目(依赖于Bzip2)1.根据下载的bsdiff...

  • 增量更新

    github完整代码传送门 bsdiff 源码http://www.daemonology.net/bsdiff/...

网友评论

      本文标题:Greendao-增量更新

      本文链接:https://www.haomeiwen.com/subject/limwmhtx.html