
参考
Github
系列
Android GreenDao框架使用 基础篇
Android GreenDao框架使用 增删改查篇
Android GreenDao框架使用 进阶篇之queryBuilder
GreenDao如果直接修改实体类,增加版本的话数据会直接清除。只能通过外力来解决这方面的问题。
一.添加依赖在工程的build.gradle文件中添加
allprojects { repositorIEs { ... maven { url "https://jitpack.io" } }}在项目的build.gradle文件中添加
implementation 'io.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1'目前引用的版本是最新版,后续更新要注意上方的参考文档。
二.重写Helper类public class GreenDaoUpgradeHelper extends DaoMaster.OpenHelper { public GreenDaoUpgradeHelper(Context context, String name, sqliteDatabase.CursorFactory factory) { super(context, name, factory); } @OverrIDe public voID onUpgrade(sqliteDatabase db, int oldVersion, int newVersion) { super.onUpgrade(db, oldVersion, newVersion); MigrationHelper.migrate(db, new MigrationHelper.ReCreatealltableListener() { @OverrIDe public voID onCreatealltables(Database db, boolean ifNotExists) { DaoMaster.createalltables(db, true); } @OverrIDe public voID onDropAlltables(Database db, boolean ifExists) { DaoMaster.dropAlltables(db, true); } }, TestUserDao.class); }}TestUserDao.class这个参数一定要注意,因为快捷键敲出的这个监听方法是没有这个参数的,而且不报错。如果直接运行,它是不知道要升级那个表的。这个位置可以放多个升级表类。
三.替换public class GreenDaoManager { private static GreenDaoManager greenDaoManager; private DaoSession daoSession; /** * 私有化 */ private GreenDaoManager(){ } /** * 对外暴露的获取方法 * @return 单例对象 */ public static GreenDaoManager getInstance(){ if (null==greenDaoManager){ synchronized (GreenDaoManager.class){ if (null==greenDaoManager){ greenDaoManager=new GreenDaoManager(); } } } return greenDaoManager; } /** * 数据库初始化 * @param context 上下文 */ public voID init(Context context){ //替换位置 GreenDaoUpgradeHelper helper = new GreenDaoUpgradeHelper(context, "test-db", null); sqliteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); } /** * 获取管理特定架构的所有可用DAO对象 * @return daoSession */ public DaoSession getDaoSession(){ return daoSession; }}四.升级版本在项目的build.gradle文件中修改
greendao { schemaVersion 2}五.修改实体类@Entitypublic class TestUser { @ID(autoincrement = true) private Long ID; @NotNull private String name; @NotNull private int age; private String character; private String status; @NotNull private String sex; @Index(unique = true) private String uID; @Generated(hash = 223104968) public TestUser(Long ID, @NotNull String name, int age, String character, String status, @NotNull String sex, String uID) { this.ID = ID; this.name = name; this.age = age; this.character = character; this.status = status; this.sex = sex; this.uID = uID; } @Generated(hash = 925009630) public TestUser() { } public Long getID() { return this.ID; } public voID setID(Long ID) { this.ID = ID; } public String getname() { return this.name; } public voID setname(String name) { this.name = name; } public int getAge() { return this.age; } public voID setAge(int age) { this.age = age; } public String getSex() { return this.sex; } public voID setSex(String sex) { this.sex = sex; } public String getUID() { return this.uID; } public voID setUID(String uID) { this.uID = uID; } public String getCharacter() { return this.character; } public voID setCharacter(String character) { this.character = character; } public String getStatus() { return this.status; } public voID setStatus(String status) { this.status = status; }}点击Build → Make Project会自动生成代码。
完成之后数据就不会丢失了,前3步做完之后,就可以重复4,5步了。
总结以上是内存溢出为你收集整理的Android GreenDao框架使用 进阶篇之数据库升级全部内容,希望文章能够帮你解决Android GreenDao框架使用 进阶篇之数据库升级所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)