![](https://img.haomeiwen.com/i13436492/650193a67fc652f5.jpg)
(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");
}
}
- 更新工具
- 修改更新方法
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();
- 这样新增字段和减少字段都无需额外操作,自动转移数据;但改变数据库字段会导致错误
网友评论