高度なデータベースアップグレードを使用したAndroidGreenDaoフレームワーク

参照

Github

シリーズ

AndroidGreenDaoフレームワークは基本的な記事を使用し
ますAndroidGreenDaoフレームワークは追加、削除、変更を使用して記事をチェックし
ますAndroidGreenDaoフレームワークは高度な記事queryBuilderを使用します

GreenDaoがエンティティクラスを直接変更する場合、バージョンが追加されるとデータは直接クリアされます。この問題は、外力によってのみ解決できます。

1.依存関係を追加します

プロジェクトのbuild.gradleファイルを追加します

allprojects {
    
    
    repositories {
    
    
       ...
        maven {
    
     url "https://jitpack.io" }
    }
}

プロジェクトのbuild.gradleファイルを追加します

 implementation 'io.github.yuweiguocn:GreenDaoUpgradeHelper:v2.2.1'

現在引用されているバージョンは最新バージョンであり、その後の更新では上記の参照ドキュメントに注意を払う必要があります。

2.ヘルパークラスを書き直します

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のパラメーターに注意する必要があります。直接実行すると、アップグレードするテーブルがわかりません。複数のアップグレードテーブルクラスをこの位置に配置できます。

3.交換する

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;
    }
}

4.アップグレードバージョン

プロジェクトのbuild.gradleファイルで変更します

greendao {
    
    
        schemaVersion 2
}

5.エンティティクラスを変更します

@Entity
public 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;
    }
}

[ビルド]→[プロジェクトの作成]をクリックすると、コードが自動的に生成されます。

完了後にデータが失われることはありません。最初の3つの手順が完了したら、手順4と5を繰り返すことができます。

おすすめ

転載: blog.csdn.net/m0_48440239/article/details/114311035