2013-09-27 2 views
0

내 개발을 쉽게하기 위해 DatabaseHelper를 만들었습니다. 데이터베이스 버전이 1에서 2로 업그레이드되면 onUpgrade가 호출되고 테이블이 삭제됩니다. 나는 이것이 내 데이터가 테이블에 저장된 이유가 너무 떨어졌을 까? 나는 테이블에 저장된 데이터를 잃어 버릴 것인가?onUpgrade가 호출 될 때 데이터가 손실됩니까

다음은 코드입니다.

private static class DatabaseHelper extends SQLiteOpenHelper { 

    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(DATABASE_CREATE); 
    } 

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

답변

2

, 예 당신은 데이터베이스notes를 만들 수있는 새로운 빈 테이블의 현재 테이블을 잃게됩니다.

그래서 데이터베이스를 업그레이드 할 수있는 가장 좋은 방법은이 전에이다 : 당신은 (가장 쉬운 방법은 테이블의 이름을 변경하는 것입니다) 현재 데이터베이스 의 백업을 만든 다음 드롭해야

db.execSQL("DROP TABLE IF EXISTS notes"); 

문, 새 테이블을 만들려면 현재 테이블.

정보를 편집/업그레이드하기 전에 정보를 백업하는 것이 항상 좋은 프로그래밍 습관입니다.

2

테이블을 삭제하면 데이터도 모두 삭제됩니다. 계속 유지하려면 테이블의 이름을 먼저 바꾸고 새 테이블을 만든 다음 이전 테이블에서 새 테이블로 데이터를 선택하십시오. 코드를보고

+0

테이블의 이름을 바꾸는 것이 좋습니다. 나는 그것을 시도 할 것이다. – edisonthk

0

coloumn이 변경되면 onUpgrade 메소드에서 테이블을 변경할 수 있습니다. 신선한 테이블을 만들고 싶다면 onUpgrade 안의 Drop 만 호출하십시오. 스키마에 아무런 변화가 없다면 onUpgrade 메소드 안에 아무 것도하지 마십시오.

관련 문제