greenDAO數(shù)據(jù)庫之升級(jí)

傳送門-->索引

一、GreenDaoUpgradeHelper開源庫 傳送門-->GreenDaoUpgradeHelper

  • 開源庫自我介紹 :GreenDaoUpgradeHelper is a database upgrade helper for greenDao.Use GreenDaoUpgradeHelper can easy solve database upgrade that's just need one line code.(~. .^)我……算了。
  • 如何使用:

1.Add it in your root build.gradle at the end of repositories:

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

2.Add the dependency(greendao 3.0 above)

    dependencies {
            compile 'org.greenrobot:greendao:3.2.0'
            compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v2.0.3'
    }

or (greendao 3.0 below)

    dependencies {
            compile 'de.greenrobot:greendao:2.0.0'
            compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.0.1'
    }

3.Add a new class that extends DaoMaster.OpenHelper,add a constructor,implement onUpgrade method and called migratemethod,arguments is all of generated Dao class:

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);
            }
        },TestDataDao.class, TestData2Dao.class, TestData3Dao.class);

like this:

public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }
    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        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);
                    }
                },TestDataDao.class, TestData2Dao.class, TestData3Dao.class);
    }
}

4.Finally,init like this:

//MigrationHelper.DEBUG = true;  //if you want see the log info,default is false
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this, "test.db",
                null);
        daoMaster = new DaoMaster(helper.getWritableDatabase());

5.ProGuard rule

-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
    public static void dropTable(org.greenrobot.greendao.database.Database, boolean);
    public static void createTable(org.greenrobot.greendao.database.Database, boolean);
}

二、集成到自己的項(xiàng)目中
基于上一篇封裝的DaoManager,在該類中添加靜態(tài)內(nèi)部類MySQLiteOpenHelper

注意:bean類的變量類型最好用引用類型的,如果你在表中新加一個(gè)int變量字段,那數(shù)據(jù)庫更新后數(shù)據(jù)庫會(huì)被清空。

/**
 * Creator: Jowney  (~._.~)
 * Date: 2018/5/13/20:18
 * Description:
 */

public class DaoManager {
    private static final String DB_NAME = "jDatabase.db";//數(shù)據(jù)庫名稱
    private static DaoManager mDaoManager;
    private DaoManager.MySQLiteOpenHelper mHelper;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private Context context;
    private boolean encrypt = false;//數(shù)據(jù)庫加密,默認(rèn)不加密
    private String password =null;
    public DaoManager(Context context) {
        this.context = context;
    }

    /**
     * 使用單例模式獲得操作數(shù)據(jù)庫的對(duì)象
     *
     * @return
     */
    public static DaoManager getInstance(Context context) {
        if (mDaoManager == null) {
            synchronized (DaoManager.class) {
                if (mDaoManager == null) {
                    mDaoManager = new DaoManager(context);
                }
            }
        }
        return mDaoManager;
    }

    /**
     * 獲取DaoSession
     *
     * @return
     */
    public synchronized DaoSession getDaoSession() {
        if (null == mDaoSession) {
            mDaoSession = getDaoMaster().newSession();
        }
        return mDaoSession;
    }

    /**
     * 設(shè)置debug模式開啟或關(guān)閉,默認(rèn)關(guān)閉
     *
     * @param flag
     */
    public  void setDebug(boolean flag) {
        QueryBuilder.LOG_SQL = flag;
        QueryBuilder.LOG_VALUES = flag;
    }

    /**
     *將標(biāo)志位設(shè)為true
     */
    public void encryptDatabase(String password) {
        this.encrypt = true;
        this.password = password;
    }

    /**
     * 關(guān)閉數(shù)據(jù)庫
     */
    public synchronized void closeDataBase() {
        closeHelper();
        closeDaoSession();
    }

    /**
     * 判斷數(shù)據(jù)庫是否存在,如果不存在則創(chuàng)建
     *
     * @return
     */
    private DaoMaster getDaoMaster() {
        if (null == mDaoMaster) {
             mHelper = new DaoMaster.MySQLiteOpenHelper(context, DB_NAME, null);   
                mDaoMaster = new DaoMaster(mHelper.getWritableDb());          
        }
        return mDaoMaster;
    }

    private void closeDaoSession() {
        if (null != mDaoSession) {
            mDaoSession.clear();
            mDaoSession = null;
        }
    }

    private void closeHelper() {
        if (mHelper != null) {
            mHelper.close();
            mHelper = null;
        }
    }

    public static class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
        public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
            super(context, name, factory);
        }

        @Override
        public void onUpgrade(Database db, int oldVersion, int newVersion) {
            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);
                }
            }, StudentDao.class);
        }
    } 
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容