当前位置: 代码迷 >> 综合 >> greenDAO对数据库操作的升级问题
  详细解决方案

greenDAO对数据库操作的升级问题

热度:5   发布时间:2023-10-12 18:51:25.0

最近项目中用到了数据库,第三方库greenDAO对数据库操作的封装有特别好用,因此在项目中集成了greenDAO。但是当项目版本升级的时候,遇到了数据库升级的问题。经查greenDAO的源码,发现它对数据库升级的源码是将原有的数据库删除,重新建立新的数据库了。如果不想删除原有的数据,那么就涉及到数据库升级问题,数据库升级比较麻烦的就是数据的迁移问题

库文件下定义:

greendao {schemaVersion 1//指定数据库版本号,更新操作会用到;daoPackage '***'//自动生成的dao的包名,包名默认是entity所在的包;targetGenDir 'src/main/java'//生成数据库文件的目录
}
创建数据库对象的实体类

@Entity

重新编译一下,会自动生成数据库使用的类

当对数据库实体类的参数变更时候

public class Helper extends DaoMaster.OpenHelper{private static DaoMaster daoMaster;private static DaoSession daoSession;public static final String DBNAME = "greendao.db";public Helper(Context context){super(context,DBNAME,null);}@Overridepublic void onUpgrade(Database db, int oldVersion, int newVersion) {super.onUpgrade(db, oldVersion, newVersion);Log.i("version", oldVersion + "---先前和更新之后的版本---" + newVersion);if (oldVersion < newVersion) {Log.i("version", oldVersion + "---先前和更新之后的版本---" + newVersion);MigrationHelper.getInstance().migrate(db, UserDao.class);//更改过的实体类(新增的不用加)   更新UserDao文件 可以添加多个  XXDao.class 文件
//             MigrationHelper.getInstance().migrate(db, UserDao.class,XXDao.class);
        }}/*** 取得DaoMaster** @param context* @return*/public static DaoMaster getDaoMaster(Context context) {if (daoMaster == null) {DaoMaster.OpenHelper helper = new DaoMaster.DevOpenHelper(context,DBNAME, null);daoMaster = new DaoMaster(helper.getWritableDatabase());}return daoMaster;}/*** 取得DaoSession** @param context* @return*/public static DaoSession getDaoSession(Context context) {if (daoSession == null) {if (daoMaster == null) {daoMaster = getDaoMaster(context);}daoSession = daoMaster.newSession();}return daoSession;}
}

完成相关操作之后;还要改数据库版本

greendao {schemaVersion 2//改版本号为2daoPackage 'com.zhangqie.greendao.gen'targetGenDir 'src/main/java'
}

编译运行,可以去实体类和UserDao查看  增加的字段相关信息自动生成完成;

当然先前的版本1 中的数据也是存在的,只不过 新添加的字段 的值全部为空而已;

至此,数据库升级完成