Android GreenDao框架使用 进阶篇之数据库升级

Android GreenDao框架使用 进阶篇之数据库升级,第1张

概述参考Github系列AndroidGreenDao框架使用基础篇AndroidGreenDao框架使用增删改查篇AndroidGreenDao框架使用进阶篇之queryBuilderGreenDao如果直接修改实体类,增加版本的话数据会直接清除。只能通过外力来解决这方面的问题。一.添加依赖在工程的build.gradle

参考

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框架使用 进阶篇之数据库升级所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1033358.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存