美文网首页
greendao的数据库升级<5>

greendao的数据库升级<5>

作者: 天空在微笑 | 来源:发表于2017-11-22 22:02 被阅读11次
    数据库升级的意义:

    如果我们再项目中使用了数据库。而数据库的结构在第一版的时候定下来,之后发布功能更新,或增加业务逻辑,原来的数据库结构可能就不适用了。而如果数据库的结构与之前版本的结构不同,新版本的应用读取旧数据库肯定会出问题。解决办法只有两种:
    1.让用户卸载老版本再安装新的程序;
    2.软件自行更新数据库结构。
    第一种办法很明显不具备可操作性,而且用户一旦卸载软件,数据就丢失了,这是不能容忍的事情。因此,作为开发者必须妥善处理数据库的升级问题。

    • 修改gradle文件

    首先在module的gradle文件中修改版本号:

    //改为最新的版本号  
    schemaVersion 2
    

    如果只是做了上面的步骤则会默认清除所有数据,一看源码便知,当检测到version变化的时候便执行dropAllTables()操作,再重新建库

        /** WARNING: Drops all table on Upgrade! Use only during development. */
        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);
            }
        }
    

    数据迁移的核心思想:
    1 把旧表改为临时表
    2 建立新表
    3 临时表数据写入新表,删除临时表

    站在巨人的肩膀上,这里直接使用了开源的库,配合greenDAO来做数据迁移,亲测稳定:
    GreenDaoUpgradeHelper

    schemaVersion 版本加1,User类新增属性:major

    不做迁移处理前,重新安装后数据库已经被重置,数据为空。迁移配置后,旧表数据已经被存到新表中,major字段为null;

    greenDAO3 入门(配置,基本操作,数据库升级)
    Android GreenDao使用详解——(下)数据库升级

    相关文章

      网友评论

          本文标题:greendao的数据库升级<5>

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