2012-05-14 3 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;"); 
     } 
    } 

그러나 나는 열이 존재하지 않는다고 말했습니다 때문에 ALTER 아직 최선을 다하고있다 생각하지 않습니다. 어떠한 제안?

편집 : 좀 더 주변 코드

편집을 추가 : 내 실수. 값 부분을 둘러싼 인용문이 누락되어 열이 없다는 오류가 발생했지만 문제는 인용 부호없이 사용한 값의 열을 찾고 있다는 것이 었습니다.

+0

확인을 ADD -이 나 자신 일 (놓친 인용 등) 한 . 나는 다른 사람들이 오해 할 소지가 있으므로 대답을 삭제했습니다. – 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

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에 familair ... 그래서 다음 구문은 –

+0

흠, 좋아. 난 그냥 SQLite 워드 프로세서를 다시 검사하고 당신이 맞습니다 -'ADD' 자체는 허용되지만 일반적으로'ADD COLUMN' 만 보았습니다. 분명히 이것은 OP의 문제는 아니었지만 그들은 이제 그것을 해결했습니다. – Squonk

관련 문제