Android 绿刀不更新。如何向旧表中添加新列?

Android 绿刀不更新。如何向旧表中添加新列?,android,sqlite,greendao,Android,Sqlite,Greendao,当使用绿色dao时,从一个模式更新到下一个模式需要一些代码定制。对于我以前的需要,在DaoMaster.java中使用如下代码添加任何新表就足够了: if(oldVersion==SCHEMA_VERSION_OLD_VERSION&& newVersion==SCHEMA_VERSION){ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVe

当使用绿色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代码来实现这一点? (欢迎使用任何代码示例)

提前谢谢

  • 请看一下用于创建表的SQL代码(位于DAO类中)
  • 提取SQL中的相关更改
  • 手动更新现有表
  • 例如:

    @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. */
        }
    }
    
  • 请看一下用于创建表的SQL代码(位于DAO类中)
  • 提取SQL中的相关更改
  • 手动更新现有表
  • 例如:

    @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. */
        }
    }