그러냐

[android] SQLiteOpenHelper onCreate () / onUpgrade ()는 언제 실행됩니까? 본문

android

[android] SQLiteOpenHelper onCreate () / onUpgrade ()는 언제 실행됩니까?

관절분리 2018. 11. 7. 16:18
반응형

출 처 : https://code.i-harness.com/ko-kr/q/14de488



Jaskey의 요청에 따라 누락 된 포인트를 추가하려면 여기를 클릭하십시오.

데이터베이스 버전은 SQLite 데이터베이스 파일에 저장됩니다.

catch는 생성자입니다.

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

따라서 데이터베이스 헬퍼 생성자가 name (두 번째 매개 변수)과 함께 호출되면 플랫폼은 데이터베이스가 존재하는지 여부를 확인하고 데이터베이스가 존재하면 데이터베이스 파일 헤더에서 버전 정보를 가져 와서 올바른 콜백을 트리거합니다

이전 답변에서 이미 설명한 것처럼 이름이있는 데이터베이스가 존재하지 않으면 onCreate 트리거됩니다.

아래의 설명은 onUpgrade 케이스와 예제를 설명합니다.

예를 들어, 첫 번째 버전의 응용 프로그램에는 생성자가 버전 1 전달하는 DatabaseHelper ( SQLiteOpenHelper 확장)가 있고 버전을 2 전달한 새 소스 코드로 업그레이드 한 응용 프로그램을 제공 한 다음 DatabaseHelper가 생성되면 자동으로 다음에 의해 플랫폼 트리거가 onUpgrade 됩니다. 파일이 이미 있지만 버전이 현재 버전보다 작음을 확인했습니다.

이제 db 버전 3 (데이터베이스 버전이 데이터베이스 스키마를 수정할 때만 증가됨)으로 응용 프로그램의 세 번째 버전을 제공 할 계획이라고 가정 해보십시오. 이러한 증분 업그레이드에서는 더 나은 유지 보수가 가능한 코드를 위해 각 버전의 업그레이드 로직을 점진적으로 작성해야합니다

아래의 의사 코드 예제 :

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  switch(oldVersion) {
    case 1:
       //upgrade logic from version 1 to 2
    case 2:
       //upgrade logic from version 2 to 3
    case 3:
       //upgrade logic from version 3 to 4
       break;
    default:
       throw new IllegalStateException(
                "onUpgrade() with unknown oldVersion " + oldVersion);
  }
}

case 1  2 에서 break 문이 누락되었음을 확인하십시오. 이것은 점진적 업그레이드라는 것을 의미합니다.

이전 버전이 2 이고 새 버전이 4 하면 논리는 데이터베이스를 2 에서 3업그레이드 한 다음 4 업그레이드합니다.

이전 버전이 3 이고 새 버전이 4 이면 3 에서 4 까지의 업그레이드 로직 만 실행합니다.

 Question

 SQLiteOpenHelper onCreate() 내 테이블을 만들지 만받을

SQLiteException: no such table

또는

SQLiteException: no such column

오류. 왜?

노트:

(이것은 매주 수십 개의 유사한 질문이 합쳐진 요약본입니다. "정식"커뮤니티 위키 질문 / 답변을 제공하여 모든 질문이 좋은 참조로 이어질 수 있도록 노력하십시오.)


반응형