GreenDao在数据升级的时候会采用,先把本地已有的表和数据删除再重新再建一张新的表,这样会导致用户之前缓存的数据给清空了,带来不太好的影响。
写一个MyOpenHelper类继承DaoMaster.OpenHelper
public class MyOpenHelper extends DaoMaster.OpenHelper {
public MyOpenHelper(Context context, String name) {
super(context, name);
}
public MyOpenHelper(Context context, String name,
SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override public void onUpgrade(Database db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
Log.e("Tag", "table ==>onUpgrade");
}
在数据库升级的时候,会走onUpgrade 方法,点击进去
/** * Override this if you do not want to depend on {@link SQLiteDatabase}. */ public void onUpgrade(Database db, int oldVersion, int newVersion) { // Do nothing by default }
发现没做什么,看她的继承类
一共两个继承类,DevOpenHelper 和MyOpenHelper,前面一个是系统给我们提供的,后面一个是上面我们继承的,我们看系统是如何处理更新的
@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);
}
上面是系统处理 onUpgrade的方法调用了两个方法
dropAllTables(db,true) 这个方法就是删除已有的表中的信息,有兴趣的同学可以进去看下
onCreate方法就是重新建表
我们为了避免不删除库中原有的信息,所以我们不需要系统提供的,我们需要重新上面的方法,这就是为什么要写一个MyOpenHelper类继承DaoMaster.OpenHelper重写onUpgrade()方法
public class MyOpenHelper extends DaoMaster.OpenHelper { public MyOpenHelper(Context context, String name) { super(context, name); } public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(Database db, int oldVersion, int newVersion) { super.onUpgrade(db, oldVersion, newVersion); Log.e("Tag", "table ==>onUpgrade"); //进行数据库的迁移 if (newVersion > oldVersion) { //这里有需要更细的同学可以根据不同的oldVersion处理不同的逻辑 DBMigrationHelper.getInstance().migrate(db, RoutBeanDao.class); } }
上面DBMigrationHelper类的作用是,创建一张和oldVersion一样的临时表,将数据copy过去,再创建新表后将数据复制给新表,DBMigrationHelper再文末会给大家
现在我本地建了一张表,我们先用SQLiteStudio来查看表中的数据
第一步将表导出:
在data /data /包名/数据库名/导出
这里我就不演示了:
这是已有的数据
现在我们添加一个 TEST_ID这个字段
发现数据还在,TEST_ID 添加上了
其他还有很多,删除字段等,大家有时间可以自己测试下
资源:
https://download.csdn.net/download/xueyoubangbang/11179284 //查看数据库的下载
https://download.csdn.net/download/xueyoubangbang/11179276 //DBMigrationHelper的下载