2014-07-01 58 views
0

當使用綠道時,需要從一個模式更新到下一個模式的代碼定製。對於我先前的需求就足以加入DaoMaster.java使用像這樣的代碼中的任何新表:Green Dao onUpdate。我如何向舊錶添加新列?

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代碼以實現這一目標? (任何代碼示例是歡迎的很多)

在此先感謝

回答

9
  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. */ 
    } 
} 
+0

上帝保佑你,先生 – Arcantos