2013-11-09 4 views
2

데이터베이스 응용 프로그램을 개발 중이며 한 곳에서 갇혀 있습니다.안드로이드의 sqlite 데이터베이스에서 onUpgrade

시나리오는 다음과 같습니다. 데이터베이스가 있고 데이터베이스 버전을 유지 관리하고 있습니다. 응용 프로그램 버전과 동일합니다.

이제 버전 1의 데이터베이스를 구현하고 있습니다. 버전 1에서 3 개의 테이블이 생성됩니다. 버전 2에서는 하나 이상의 테이블을 추가하여 데이터베이스를 업그레이드하고 있습니다. 따라서 쿼리는 upgrade()에 있습니다.

사용자가 버전 2를 설치하면 어떻게 될까요? 데이터베이스가 없으므로 onUpgrade()가 호출되지 않습니다. 따라서 onCreate()가 호출되고 결과는 3 개의 테이블 만 생성됩니다.

onCreate()에서 onUpgrade()를 명시 적으로 호출하려고 생각했습니다. 그러나 stackoverflow에 대한 많은 개발자들은이를 명시 적으로 호출하지 말 것을 제안했습니다.

나는 완전히 좌초되었다.

미리 감사드립니다.

+0

2015 년 왜'onCreate' 세 개의 테이블을 생성 않습니다 Head First Android Development에서 영감을? –

+0

답장을 보내 주셔서 감사합니다. 그것은 단지 예일뿐입니다. 내 응용 프로그램에서 onUpgrade() 메서드를 처리하고 싶습니다. –

답변

0

난 당신이 확실히 해결책을 발견, 그것은 이전 게시물 알고,하지만 난 (upvoted) 유효한 질문을 찾아서 답변을받지 못했다으로, 여기 내 2 센트 : onCreate()에서 onUpgrade() 호출

(나는 그것을 테스트하지 않았다) 일해야하지만, 당신을 도우미로 편성하는 더 좋은 방법이있다. (이하 스 니펫 참조). 요점은이 두 가지 방법이 단지 진입 점이라는 것입니다. 도우미 이런 종류의

public class SampleDBHelper extends SQLiteOpenHelper { 

    private static final String DB_NAME = "mydatabase"; 
    private static final int DB_VERSION = 2; 

    public SampleDBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     updateDatabase(db, 0, DB_VERSION); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     updateDatabase(db, oldVersion, newVersion); 
    } 

    private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) { 
     if (oldVersion < 1) { 
      // Create 3 initial tables 
     } 
     if (oldVersion < 2) { 
      // Create the new table 
     } 
    } 

} 

장점은 :

  • 당신은 onCreate()onUpgrade() 방법 만 updateDatabase()을 변경할 필요가 없습니다.
    • 증가 DB_VERSION
    • 이 새로운 섹션 if (oldVersion < N) { // do the upgrade }를 추가 : 새 버전에 대한
    • , 당신은 할 필요가있다.

제공 : 강하게, 새벽 데이비드 그리피스, 라일리,

관련 문제