2012-05-14 19 views
5

如何在DatabaseHelper onUpgrade中添加列並將預先存在的行設置爲特定值?如何在onUpgrade中添加列並將現有行設置爲特定值?

我想:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    ... 
     if (oldVersion < 2) { 
      db.execSQL("ALTER TABLE " + MyTableName + " ADD COLUMN " 
       + MyNewColumn + " TEXT;");  
      db.execSQL("UPDATE " + MyTableName + " SET " + 
       MyNewColumn + "=" + "value for existing;"); 
     } 
    } 

但我不覺得,因爲它說,列不存在聖壇一直沒有提交。任何建議?

編輯:增加了一些更多的周邊代碼

編輯:我的錯誤。我只是錯過了關於價值部分的報價,關於沒有專欄的錯誤讓我失望,但問題在於它正在尋找我沒有引用的價值的列。

+0

OK - 我這個做我自己(錯過行情等) 。我已經刪除了我的答案,因爲將來可能會誤導他人。 – Squonk

回答

1

這不是那麼簡單添加一列,你已經顯示爲onUpgrade將運行每次升級數據庫和時間加上列第二次失敗......如果你想做到這一點快速和骯髒的你可以用它在一個嘗試捕捉

try { 
    db.execSQL("ALTER TABLE sometable ADD COLUMN newcolumn integer"); 
} 
catch(Exception e) { 
    e.printStackTrace(); 
} 

一個更好的辦法是將所有的數據從表到一個臨時表,刪除並重新創建表,並把數據回去。下面是一個例子我以前用過的東西

//Update old Table 
     if(DBVER< 1060){ 

      List<String> columns = DB.GetColumns(db, "listitems"); 
      db.execSQL("ALTER table listitems RENAME TO 'temp_listitems); ") ; 
      String tblListItems = "create table if not exists listitems " + 
        "(id integer primary key autoincrement, " + 
        "listid integer, " + 
        "itemid integer, " + 
        "qty integer, " + 
        "collected integer, " + 
        "qtytype integer, " + 
        "tabid integer); " ; 
      db.execSQL(tblListItems); 
      columns.retainAll(DB.GetColumns(db, "listitems")); 
      String cols = DB.join(columns, ","); 
      db.execSQL(String.format("INSERT INTO %s (%s) SELECT %s from temp_%s", "listitems", cols, cols, "listitems")); 
      db.execSQL("DROP table 'temp_" + "listitems"); 



     } 

繼承人鏈接http://www.devdaily.com/android/sqlite-alter-table-syntax-examples

0
db.execSQL("ALTER TABLE " + MyTableName + " ADD " 
      + MyNewColumn + " TEXT;"); 

嘗試沒有列: 語法是:

ALTER TABLE [TABLE_NAME] ADD [COLUMN_NAME]數據類型

+0

**語法是:ALTER TABLE [TABLE_NAME] ADD [COLUMN_NAME] DATATYPE **不是我所知道的。你有沒有碰巧從w3schools那裏得到這個機會? '... ADD COLUMN ...'實際上是正確的語法。 – Squonk

+0

沒有我的家庭SQL服務器...所以下面的語法 –

+0

嗯,好的。我剛剛重新檢查了SQLite文檔,你是正確的 - 自己的'ADD'是允許的,但我通常只看到'ADD COLUMN'。顯然這不是OP的問題,但他們現在已經解決了。 – Squonk

相關問題