2012-05-14 7 views
5

アップグレード時にDatabaseHelperにカラムを追加し、既存のローを特定の値に設定するにはどうすればよいですか?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"); 



     } 

Heres a link http://www.devdaily.com/android/sqlite-alter-table-syntax-examples

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

列せずにそれを試してみてください。 構文は次のとおりです。

ALTER TABLEは、[TABLE_NAME] [COLUMN_NAME] DATATYPE

+0

**構文は次のとおりです。ALTER TABLE [TABLE_NAME] ADD [COLUMN_NAME] DATATYPE **わかっていません。あなたは万が一w3schoolsからそれを取得しましたか? '... ADD COLUMN ...'は実際には正しい構文です。 – Squonk

+0

私はSQL Serverのファミリではありません。したがって、次の構文 –

+0

Hmmm、OK。私はSQLiteのドキュメントを再確認しました。あなたは正しいです - それだけで 'ADD'は許されますが、私は通常' ADD COLUMN'を見ました。明らかに、これはOPの問題ではなく、彼らは今それを解決しました。 – Squonk

関連する問題