GreenDAO 学习笔记-小白教程(三)数据库升级及注意事项
2017-11-03 00:14
691 查看
数据库升级
我们可以自定义一个MyOpenHelper类,来继承DaoMaster.OpenHelper,当初始化数据库的时候,我们就可以调用这个类来新建对象:MyOpenHelper openHelper = new MyOpenHelper( context.getApplicationContext(), DATABASE_NAME, null);
/** * 定义一个MySQLiteOpenHelper类,用来处理数据库升级 */ static class MyOpenHelper extends DaoMaster.OpenHelper { 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); } }
在app的build.gradle文件中,将greendao 里边的schemaVersion字段增加,则做到了数据库升级的效果。再次运行程序,就会调用我们的MyOpenHelper的onUpgradle方法。
在这里,我们采用github上很有用的数据库升级数据迁移开元库GreenDaoUpgradeHelper。在数据库升级的时候,做数据迁移。具体使用方法为:
假如为Player添加一个Integer的champion字段,用来表示获得的总冠军次数。
将schemaVersion的值由1改为2.
数据迁移:覆盖MyOpenHelper的onUpgrade方法。即调用MigrationHelper的migrate方法,实现接口ReCreateAllTableListener的两个方法(这是固定的),再将PlayerDao.class作为另个一个参数传入。
修改显示champion的Adapter的方法:
if (player.getChampion() == null) { holder.mTvChampion.setVisibility(View.GONE); } else { holder.mTvChampion.setVisibility(View.VISIBLE); holder.mTvChampion.setText(mContext.getString(R.string.player_champion, player.getChampion())); }
/** * 定义一个MySQLiteOpenHelper类,用来处理数据库升级 */ static class MyOpenHelper extends DaoMaster.OpenHelper { 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.d(TAG, "onUpgrade: old: " + oldVersion + ", new: " + newVersion); if (oldVersion <= 1) { 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); } }, PlayerDao.class); } } }
注意
新添加的字段的数据类型必须是对象类型,如果是基本数据类型,则需要改为其对应的包装类,否则,在数据库升级做数据迁移的时候,就会出现异常android.database.sqlite.SQLiteConstraintException,导致数据迁移失败,对于用户的使用体验是很差的。
Demo源代码地址
GreenDaoUpgradeHelper地址相关文章推荐
- GreenDAO 学习笔记-小白教程(二)使用单例类来管理DaoSession
- SQL学习笔记之数据库专题(三):Android下Sqlite数据库ORM框架之GreenDao详解
- GreenDao数据库降级安装注意事项
- Android框架学习之GreenDao(二)数据库升级
- JS学习笔记2015-4-15(第二天)——属性操作的注意事项&中括号在JS中的使用
- 【SQL基础教程】数据库学习笔记
- 个人笔记(孔浩Maven视频教程)——02.Maven安装的注意事项
- Git学习笔记总结和注意事项
- Android ORM 框架:GreenDao 数据库升级
- greenDAO的使用详解---(2)greenDAO3.2.2数据库的升级
- Android ORM数据库之GreenDao使用教程及源码分析
- 小白的廖雪峰JS教程学习笔记要点---数据类型和变量
- Delphi基础语法的学习笔记和注意事项总结
- android GreenDao数据库框架学习(2)
- [学习笔记]寄存器使用注意事项
- Go语言学习笔记 --- 指针和自增自减运算及相关注意事项
- GreenDao数据库升级,包含了Int类型的哦
- OC学习笔记[注意事项]
- ARC简介和注意事项(学习笔记1)
- Java学习笔记(77)-----------注释注意事项