2012-07-31 2 views
0

은 내가 매니페스트 파일 의 버전 코드를 변경 4. 내 데이터베이스 버전을 업그레이드 할 내 데이터베이스 openhelper는안드로이드에서 데이터베이스 버전을 업그레이드하는 방법은 무엇입니까?

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     DTLog.w("Old Version" + oldVersion, "new Version" + newVersion); 
     DTLog.w("UPDATING DB", "Updating database"); 

     if (oldVersion == 1 && newVersion == 2) { 
      db.execSQL("ALTER TABLE moduleRecord ADD COLUMN subtitle1 TEXT"); 
      db.execSQL("ALTER TABLE moduleRecord ADD COLUMN subtitle2 TEXT"); 
      db.delete("moduleRecord", null, null); 

     } 
     else if ((oldVersion == 2&&newVersion == 3)) { 
      db.execSQL("CREATE TABLE " 
        + "moduleDesc" 
        + "(deleteable INTEGER,createable INTEGER,updateable INTEGER,name TEXT,label TEXT,labelfields TEXT,fields TEXT);"); 

     } else { 
      db.execSQL("DROP TABLE IF EXISTS " + "moduleRecord"); 
      db.execSQL("DROP TABLE IF EXISTS " + "ModuleName"); 
      db.execSQL("DROP TABLE IF EXISTS " + "EventStatus"); 
      db.execSQL("DROP TABLE IF EXISTS " + "moduleDesc"); 
      onCreate(db); 
     } 
    } 

내가

 07-31 12:01:15.267: W/System.err(632): 
android.database.sqlite.SQLiteException: no such table: moduleDesc: , 
while compiling: insert into moduleDesc(deleteable,createable,updateable,name,label,labelfields,fields) 
values(?,?,?,?,?,?,?) 
    07-31 12:01:15.267: W/System.err(632): 
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 
    07-31 12:01:15.267: W/System.err(632): 

at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92) 
    07-31 12:01:15.267: W/System.err(632): 

at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65) 
    07-31 12:01:15.267: W/System.err(632): 

at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83) 

사람이 말할 수 있습니다 얻을 오류입니다 날 데이터베이스를 업그레이 드하는 방법

답변

1

나는 당신의 문제가 if 문 루프 일 수 있다고 생각합니다. 사용자가 응용 프로그램의 버전 1 또는 버전 2를 가지고 있고 내가 생각하는 최신 버전으로 업그레이드하려는 경우 4

이 경우 간단히 if 루프를 통과하여 최종 else은 테이블 moduleDesc을 삭제하려고합니다. 사용자가 버전 1 또는 2에서 버전 3으로 업그레이드 할 계획 인 경우에만 생성됩니다.

요약하면 if 문을 검사하여 모든 조건을 충족시켜야합니다.

+0

thanx romin it worked –

0

당신은 UR SQL 데이터베이스 클래스에서 변경할 수 있습니다 mainfest 파일에서 변경할 필요가 없습니다 .. 아래 코드를 확인하십시오, 당신은 DATABASE_VERSION에서 변경해야합니다 Logged = 7;

public static final String TABLE_COMMENTS = "contacts"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_COMMENT = "account"; 
public static final String COLUMN_USER_ID = "contactJids"; 
public static final String COLUMN_USER_NAME = "contactNames"; 

private static final String DATABASE_NAME = "contacts.db"; 
private static final int DATABASE_VERSION =7; 

// Database creation sql statement 
private static final String DATABASE_CREATE = "create table " 
     + TABLE_COMMENTS + "(" + COLUMN_ID  + " integer primary key autoincrement, " 
           + COLUMN_COMMENT + " text not null, " 
           + COLUMN_USER_ID + " text not null, " 
           + COLUMN_USER_NAME + " text not null);"; 

public MySQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase database) { 
    database.execSQL(DATABASE_CREATE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w(MySQLiteHelper.class.getName(), 
      "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_COMMENTS); 
    onCreate(db); 
} 

    } 
관련 문제