绿道的onUpdate。 如何添加新列旧表?(Green Dao onUpdate. How c

2019-10-20 09:12发布

当使用绿色DAO有需要更新从一个模式到下一些代码定制。 对于我先前的需求是足够使用添加代码的任何新表像这样DaoMaster.java:

 if(oldVersion==SCHEMA_VERSION_OLD_VERSION&& newVersion==SCHEMA_VERSION){
             Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by adding language & checklist table");                 
             boolean ifNotExists = true;
             NewTableDao.createTable(db, ifNotExists);
             NewTable2Dao.createTable(db, ifNotExists);              
        }

到目前为止它是伟大的工作。 然而,对于我目前的架构我已经加入更多的连接表之间,并从旧版本升级后,我得到的崩溃,表明新的列不存在。

是否有greendao的方式来添加新列? 我需要编写代码的SQLite在老同学的方式得到这是怎么回事? (任何代码示例欢迎的LOT)

提前致谢

Answer 1:

  1. 看一看用于创建表(位于DAO类)的SQL代码。
  2. 提取SQL中的相关变化。
  3. 手动更新您的退出表。

例:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.i(TAG, "Update Schema to version: "+Integer.toString(oldVersion)+"->"+Integer.toString(newVersion));
    switch (oldVersion) {
        case 1:
            /* v1->v2: all changes made in version 2 come here */
            db.execSQL("ALTER TABLE "+MyDao.TABLENAME+" ADD COLUMN 'NEW_COL_1' INTEGER;");
            db.execSQL("DROP TABLE IF EXISTS 'MY_OLD_ENTITY'");
            /* break was omitted by purpose. */
        case 2:
            /* v2->v3: all changes made in version 3 come here */
            MyNewDao.createTable(db, true);
            db.execSQL("ALTER TABLE "+MyDao.TABLENAME+" ADD COLUMN 'NEW_COL_2' TEXT;");
            /* break was omitted by purpose. */
    }
}


文章来源: Green Dao onUpdate. How can I add new columns to old tables?