美文网首页
【Android】GreenDao数据库升级(四)

【Android】GreenDao数据库升级(四)

作者: 代码充电宝 | 来源:发表于2020-06-10 17:40 被阅读0次

(1)默认升级

  • 升级配置
greendao {
    //版本号,升级时可配置
    schemaVersion 1
    daoPackage 'com.xxx.ooo.greendaodemo.gendao'
    targetGenDir 'src/main/java'
}
  • schemaVersion升级后,会调用DaoMaster中的更新方法
  • 默认的升级逻辑是,先删除所有的表格,再重新创建所有的表格
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);
    }
}

<a name="y1adu"></a>

(2)自定义升级

package com.toycloud.greendao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.toycloud.greendao.db.DaoMaster;

import org.greenrobot.greendao.database.Database;

public class MyDevOpenHelper extends DaoMaster.DevOpenHelper {
    public MyDevOpenHelper(Context context, String name) {
        super(context, name);
    }

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

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        switch (oldVersion) {
            case 1:
                upgradeToVersion2(db);
            case 2:
                upgradeToVersion3(db);
            default:
                break;
        }
    }

    /**
     * 更新到版本2
     * @param db
     */
    private void upgradeToVersion2(Database db){
        Log.d("aaa", "更新到版本2");
    }

    /**
     * 更新到版本3
     * @param db
     */
    private void upgradeToVersion3(Database db){
        Log.d("aaa", "更新到版本3");
    }
}

  • 更新工具

https://github.com/yuweiguocn/GreenDaoUpgradeHelper

  • 修改更新方法
public class MyDevOpenHelper extends DaoMaster.DevOpenHelper {
    public MyDevOpenHelper(Context context, String name) {
        super(context, name);
    }

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

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        Log.e("TAG", "onUpgrade: "+oldVersion);
        Log.e("TAG", "onUpgrade: "+newVersion);
        MigrationHelper.migrate(db, new MigrationHelper.ReCreateAllTableListener() {

            @Override
            public void onCreateAllTables(Database db, boolean ifNotExists) {
                DaoMaster.createAllTables(db, ifNotExists);
            }

            @Override
            public void onDropAllTables(Database db, boolean ifExists) {
                DaoMaster.dropAllTables(db, ifExists);
            }
        }, StudentDao.class);
    }
}
  • 后续使用该类替换老的
  • 老的:DaoMaster.DevOpenHelper
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "demo.db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
  • 新的:MyDevOpenHelper
MyDevOpenHelper helper = new MyDevOpenHelper(this, "demo.db", null);
SQLiteDatabase db = helper.getWritableDatabase();
  • 这样新增字段和减少字段都无需额外操作,自动转移数据;但改变数据库字段会导致错误

相关文章

网友评论

      本文标题:【Android】GreenDao数据库升级(四)

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