GreenDao数据库升级不清除数据:
需要的引入:
implementation 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.4.0'
数据库初始化升级一定要在使用数据库之前进行,避免字段修改造成 查询数据库出错,引起程序崩溃
public static final int CURRENT_DATABASE_CODE = 15;//数据库版本
数据库的升级 :
//数据库
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this, "databaseName", null);
DaoSession mDaoSession= new DaoMaster(helper.getWritableDb()).newSession();
//获取旧版本
int oldDataBaseCode = SPUtils.init().getInt("old_database_version", CURRENT_DATABASE_CODE);
// 数据库升级
helper.onUpgrade(helper.getWritableDb(), oldDataBaseCode, CURRENT_DATABASE_CODE);
SPUtils.init().putInt("old_database_version", CURRENT_DATABASE_CODE);
数据库升级工具:
public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
MigrationHelper.migrate(db, Bean1Dao.class);// 6版本后对Bean1Dao 数据进行升级
case 7:
case 8:
case 9:
case 10:
MigrationHelper.migrate(db, BeanNewDao.class);// 10版本后对BeanNewDao数据进行升级
case 11:
MigrationHelper.migrate(db, Bean3Dao.class);// 11版本后对Bean3Dao数据进行升级
case 12:
MigrationHelper.migrate(db, Bean4Dao.class);
case 13:
MigrationHelper.migrate(db, BeanDao.class);
MigrationHelper.migrate(db, BeanDao.class);
case 14:
MigrationHelper.migrate(db, BeanDao.class);
MigrationHelper.migrate(db, BeanDao.class);
default:
break;
}
}
}
最后的重点: schemaVersion 的版本一定要+1,不然会升级失败
//greendao配置
greendao {
//数据库版本号,升级时修改
schemaVersion 7
//生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同
//daoPackage 'com.dev.base.model.db'
//生成源文件的路径。默认源文件目录是在build目录中的(build/generated/source/greendao)
//targetGenDir 'src/main/java'
}