美文网首页
GreenDao3数据库升级

GreenDao3数据库升级

作者: 贪无忧 | 来源:发表于2017-11-08 20:57 被阅读0次

在App更新的过程中,不免需要升级数据库,重建或修改表结构,但是GreenDao并没有提供相应的数据库升级方法,观察GreenDao生成的DaoMaster类,可以找到解决办法。

GreenDao中数据库版本不可修改,在编译生成的DaoMaster类中,可以看到,SCHEMA_VERSION固定为1。

public class DaoMaster extends AbstractDaoMaster {
    public static final int SCHEMA_VERSION = 1;

    ...

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

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

        @Override
        public void onCreate(Database db) {
            Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
            createAllTables(db, false);
        }
    }

    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);
        }
    }

}

一般GreenDao初始化为:

    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "fpc-db-encrypted" : "fpc-db");
    db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb();
    daoSession = new DaoMaster(db).newSession();

如果使用自带的DevOpenHelper,那么生成的数据库版本固定为SCHEMA_VERSION = 1,数据库永远不会升级。

要想升级数据库版本从而触发onUpgrade方法,需要自定义一个OpenHelper,继承org.greenrobot.greendao.database.DatabaseOpenHelper,代码如下:

...
import org.greenrobot.greendao.database.DatabaseOpenHelper;

public class GreenOpenHelper extends DatabaseOpenHelper {

    public static int DB_VERSION = BuildConfig.VERSION_CODE;

    public GreenOpenHelper(Context context, String name) {
        super(context, name, DB_VERSION);
    }

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

    @Override
    public void onCreate(Database db) {
        Log.i("greenDAO", "Creating tables for schema version " + DB_VERSION);
        DaoMaster.createAllTables(db, false);
    }

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

注意, DatabaseOpenHelper继承android.database.sqlite.SQLiteOpenHelper,需要将数据库版本写入SQLiteOpenHelper的构造器才能生效

我们使用GreenOpenHelper替代DaoMaster.DevOpenHelper,初始化代码现在变为:

    GreenOpenHelper helper = new GreenOpenHelper(this, ENCRYPTED ? "fpc-db-encrypted" : "fpc-db");
    db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb();
    daoSession = new DaoMaster(db).newSession();

现在我们可以用BuildConfig.VERSION_CODE来控制数据库版本,需要升级数据库时在build.gradle(app模块)修改versionCode就可以了。

相关文章

  • GreenDao数据库笔记

    greenDAO3 入门(配置,基本操作,数据库升级) - 简书 该文章的最后一部分数据库的升级,用了一个三方的库...

  • GreenDao3数据库升级

    在App更新的过程中,不免需要升级数据库,重建或修改表结构,但是GreenDao并没有提供相应的数据库升级方法,观...

  • greenDAO3 入门(配置,基本操作,数据库升级)

    Sqlite作为android重要的数据存储库,原生类SQLiteOpenHelper使用起来繁琐容易出错,本着"...

  • greendao3配置

    Greendao3 配置 buildscript { repositories { mavenCentral() ...

  • GreenDao3 ORM数据库集成笔记

    GreenDao3 数据库 1、优点: 1、性能高2、内存占用小3、库文件小,小于100k,编译时间低,可以避免6...

  • greenDAO3的使用

    1、greenDAO3的基本介绍:greenDAO3使用注解的方式定义实体类(entity),并且是通过安装gra...

  • 老司机带你学习GreenDao3

    我知道你们没有图是不会进来的,就是简单的greenDao3的增删改查 和完全自动化升级字段且保留之前的数据! 步骤...

  • GreenDao数据库升级

    GreenDao数据库升级 第1步:升级数据库版本号 第2步:修改数据库实体类 第3步:迁移数据库 注:数据库升级...

  • 2019-06-05 数据库升级

    数据库升级 在实际开发当中,我们经常要对数据库进行升级,但GreenDAO默认的DaoMaster.DevOpen...

  • Mysql升级注意要点

    MySQL升级注意要点 1.升级的益处,升级的影响,数据库升级方案制定,升级失败的回滚方案。 升级益处 (MySQ...

网友评论

      本文标题:GreenDao3数据库升级

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