Green Dao onUpdate.如何向旧表添加新列?

Arc*_*tos 1 sqlite android greendao

使用绿色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);              
        }
Run Code Online (Sandbox Code Playgroud)

到目前为止,它的效果非常好.但是对于我当前的模式,我在表之间添加了更多连接,并且在从旧版本更新之后,我发现崩溃表明新列不存在.

在greendao有添加新列的方法吗?我是否需要以旧学校的方式编写sqlite代码才能实现这一目标?(任何代码示例都很受欢迎)

提前致谢

Ale*_*exS 10

  1. 看一下用于创建表的SQL代码(位于DAO类中).
  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. */
    }
}
Run Code Online (Sandbox Code Playgroud)