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

来源:互联网 发布:北京婚纱照 知乎 编辑:程序博客网 时间:2024/05/23 01:22

最近项目中用到了数据库,第三方库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);    }    @Override    public 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//改版本号为2    daoPackage 'com.zhangqie.greendao.gen'    targetGenDir 'src/main/java'}

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

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

至此,数据库升级完成


原创粉丝点击