GreenDAO 学习笔记-小白教程(三)数据库升级及注意事项
来源:互联网 发布:javascript实战.pdf 编辑:程序博客网 时间:2024/05/05 10:43
数据库升级
我们可以自定义一个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地址
阅读全文
0 0
- GreenDAO 学习笔记-小白教程(三)数据库升级及注意事项
- GreenDAO 学习笔记-小白教程(一)GreenDAO的简介和基本使用
- Android GreenDao使用(三)数据库升级
- GreenDAO 学习笔记-小白教程(二)使用单例类来管理DaoSession
- Android数据库框架greenDao学习笔记(三)----应用
- Android框架学习之GreenDao(二)数据库升级
- GreenDao使用CRUD及数据库结构升级
- SQL学习笔记之数据库专题(三):Android下Sqlite数据库ORM框架之GreenDao详解
- GreenDao 数据库简单使用及数据库升级更新
- GreenDao数据库结构升级
- GreenDAO数据库版本升级
- GreenDAO数据库版本升级
- GreenDao数据库升级解决方案
- greendao数据库升级
- greenDao数据库升级
- Greendao 数据库升级解决方案
- GreenDao之数据库升级
- greenDao数据库升级
- eclipse运行慢经常卡死
- Error:C:\Users\Administrator.gradle\native\23\windows-i386\native-platform.dll (拒绝访问。)
- 每天一个linux命令(23):Linux 目录结构
- 分析数据:使用Matplotlib创建散点图---路径问题
- 文章标题
- GreenDAO 学习笔记-小白教程(三)数据库升级及注意事项
- border-image属性实现css边框特殊需求
- sdnu1013.石子合并简化版
- 运营的基础名词整理
- PHP二维数组按键值排序
- VIM的高级配置一#VIM的安装
- nginx强制使用https访问(http跳转到https)
- 《软件开发者路线图—从学徒到高手》读书笔记
- 双重锁单例模式 观察者模式