Android 数据库 跨版本升级 dbflow

项目用的是dbflow。不过应该都是大同小异。针对于数据库的话,比如v1新增了一个字符串test1,v2新增了test2,v3新增了test3。如果用户每个版本都进行升级的话,就不会出现问题。但是如果有些用户,是跨版本升级的,比如直接从v1升级到了v3。如果不做处理的话,就会变成已经升级到了v3,但是并没有test2这个字符串。导致程序出现问题。直接上代码

public class MyFlowSQliteOpenHelperextends FlowSQLiteOpenHelper {

public MyFlowSQliteOpenHelper(DatabaseDefinition databaseDefinition, DatabaseHelperListener listener) {

super(databaseDefinition, listener);

    }

@Override

    public void onUpgrade(@NonNull SQLiteDatabase db, int oldVersion, int newVersion) {

//        super.onUpgrade(db, oldVersion, newVersion);

        switch (oldVersion) {

case 1:

super.onUpgrade(db, 1, 2);

                Log.d("20201218", "case 1:");

            case 2:

super.onUpgrade(db, 2, 3);

                Log.d("20201218", "case 2:");

            case 3:

super.onUpgrade(db, 3, 4);

                Log.d("20201218", "case 3:");

            case 4:

super.onUpgrade(db, 4, 5);

                Log.d("20201218", "case 4:");

            case 5:

super.onUpgrade(db, 5, 6);

                Log.d("20201218", "case 5:");

            case 6:

super.onUpgrade(db, 6, 7);

                Log.d("20201218", "case 6:");

break;

        }

}

}

就是直接重写SQLiteOpenHelper。在onUpgrade方法里面判断当前版本。上面代码里,最新的版本是7。如果当前版本是1的话,就会运行1升级到2,2升级到3,3升级到4,一直升级到7。因为switch case里面,如果case里面的代码没有加上break的话,就会一直运行下去,直到遇到break。重写完这个方法之后,在init的时候修改一下初始化的参数就可以了

//初始化DBFlow

FlowManager.init(

new FlowConfig.Builder(this)

.addDatabaseConfig(DatabaseConfig.builder(AppDataBase.class).openHelper(new DatabaseConfig.OpenHelperCreator() {

@Override

                    public OpenHelpercreateHelper(DatabaseDefinition databaseDefinition, DatabaseHelperListener helperListener) {

return new MyFlowSQliteOpenHelper(databaseDefinition,helperListener);

                    }

})

.databaseName("test")

.build())

.build());

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容