2011-07-05 3 views
1

나는 안드로이드 SQLite 데이터베이스 처리와 다소 혼동 스럽다. 튜토리얼을 읽었지만 정확한 설명을 얻지 못했습니다.SQLite 데이터베이스 업그레이드

우리는 SQLiteOpenHelper을 확장하고 onCreate() 메서드를 무시하고 데이터베이스를 만들 수있는 데이터베이스 클래스를 가질 수 있습니다.

데이터베이스 부분을 업그레이드하는 것이 다소 혼란 스럽습니다. 다음과 같은 방법으로 우리가 데이터베이스를 만들고 처음 우리가 다시 이전 버전 = 2, newVerison을 수정하려면 버전 1. 그런 다음 버전 2 있도록 한 번 수정 의미 onUpdate(SQLiteDatabase db,int old Version,int newVerison)

그것을인가가 의미 verions을 처리하는 방법 = 3
[onUpdate(SQLiteDatabase db,int old Version,int newVerison)]

이 방법은 우리가 (2로) 다음과 같은 코드로 생성자 버전을 전달할 때

public DatabaseHelper(Context context) { 
    super(context, dbName, null,2); 
} 

I가 실행해야 할 것이다 언제 우리가 onUpgrade() 메서드를 호출해야하는지 여부를 알기 때문에 항상 2로 버전을 전달하거나 이전 버전에 대해 매번 하나씩 늘려야합니다.

답변

0

this approach을 사용하여 데이터베이스 스키마 진화를 좀 더 쉽게 만들 수 있습니다. .

+0

네,하지만 데이터베이스를 업그레이드해야 할 때 버전을 관리하는 방법을 설명 할 수 있습니까? 그것은 처음으로 데이터베이스를 생성 할 때 버전 1을 의미합니다. 그런 다음 버전 2를 한 번 수정하십시오. 그런 다음 이전 버전 = 2, newVerison = 3 또는 onUpgrade() 메소드를 호출해야 할 때마다 다시 수정해야합니다. 생성자에서 버전을 2로 전달하십시오. – JibW

0

전적으로 데이터베이스 버전을 유지하는 방법에 달려 있습니다. 당신은 당신의 버전을 테이블 구조에서 수정 한 후 또는 내용을 수정 한 후에 변경할 수 있습니다. 버전 관리를 유지하기위한 어렵고 빠른 규칙은 없습니다. 그것의 프로젝트의 요구 사항에 따라 다릅니다.

+0

예.하지만 데이터베이스를 업그레이드해야하는 경우 버전 관리 방법을 설명 할 수 있습니까? 그것은 처음으로 데이터베이스를 생성 할 때 버전 1을 의미합니다. 그런 다음 버전 2를 한 번 수정하십시오. 그런 다음 이전 버전 = 2, newVerison = 3 또는 onUpgrade() 메소드를 호출해야 할 때마다 다시 수정해야합니다. 생성자에서 버전을 2로 전달하십시오. – JibW

8

스키마가 변경 될 때마다 데이터베이스 버전이 증가합니다.

onUpgrade으로 직접 전화 할 필요가 없습니다. 안드로이드는 데이터베이스 버전을 코드가 현재 버전으로 지정하는 버전과 비교하여 데이터베이스를 열 때 필요시이를 호출합니다.

당신은 onUpgrade에서 업그레이드 프로세스를 처리 할 필요가 - 그것은 이런 식으로 뭔가를 갈 수 있습니다

int curVer = oldVersion; 
while (curVer < newVersion) { 
    curVer++; 
    switch (curVer) { 
     case 2: { 
      // Upgrade from V1 to V2 
      break; 
     } 
     case 3: { 
      // Upgrade from V2 to V3 
      break; 
     } 
     case 4: { 
      // Upgrade from V3 to V4 
      break; 
     } 
    } 
} 

이 NEWVERSION 4 말할 수 있습니다 및 oldVersion는 1 - 첫 번째 반복은 2 대답 : CurVer가 증가하고 실행 V2에서 V3 로의 업그레이드 코드. 두 번째 반복은 curVer를 3으로 증가시키고 V2에서 V3 로의 업그레이드 코드를 실행하고, 최종 반복은 curVer를 4로 증가시키고 V3에서 V4 로의 업그레이드 코드를 실행합니다.

이 값은 newVersion보다 작은 oldVersion의 모든 값에 적용됩니다. 사용자가 앱 업그레이드를 건너 뛰는 경우 중간 버전을 통해 순차적으로 업그레이드됩니다.

+0

업데이트하는 동안 데이터베이스에 데이터를 보관하는 방법을 알려주시겠습니까? –

+1

@PratikButani 업그레이드 할 때 아무 것도 삭제하지 않아도됩니다. 열이나 테이블을 추가하는 것과 같은 단순한 스키마 변경은 기존 데이터에 직접적인 영향을 미치지 않으며 더 복잡한 업데이트는 일반적으로 원래 데이터를 임시 테이블에 복사하고 변환 한 다음 원본 테이블을 삭제하고 임시 테이블의 이름을 바꿉니다. . – RivieraKid

+0

고맙습니다. 요점은 있지만 v1을 사용하거나 v2를 사용하는 것처럼 모든 버전을 처리 할 수있는 방법이 있습니다. 내가 어떻게 처리 할 수 ​​있니? –