2012-04-13 4 views
5

앱 스토어 (버전 1.0)에 앱을 업로드했습니다. 내 응용 프로그램은 일부 데이터를 저장하기 위해 sqlite 데이터베이스를 사용하고 있습니다. 이제 데이터베이스에서 몇 가지 사항을 변경했습니다 (필자는 데이터베이스에있는 테이블 중 하나에 2 또는 3 개의 새 열을 추가했습니다). 새로운 버전 1.1 (다른 db 구조를 가짐)로 이전 버전의 앱을 업데이트하고 싶습니다. 자, 이미 버전 1.0을 사용하는 사용자가 앱을 버전 1.1로 업그레이드하면 db는 이미 앱 샌드 박스에 있으며 따라서 앱은 버전 1.1을 가리키고 있지만 db는 여전히 이전 버전입니다. 이전 데이터가있는 경우 새 db를 갖고 싶습니다. 제발 도와주세요. 감사.새로운 버전을 다른 sqlite db 구조로 앱 스토어로 업데이트

+0

데이터베이스 업그레이드 전략에 대한 내 대답은 http://stackoverflow.com/a/9851554/108574를 확인하십시오. –

+0

@HeShiming 고마워. 하지만 이미 앱 스토어에 버전 1.0을 업로드했으며 메타 데이터 테이블 (제안한대로 데이터베이스 버전 저장 용)이 없습니다. 이제 새로운 버전을 업로드하고 db 구조가 변경되었습니다. 그럼 지금 어떻게 할 수 있습니까? – anshul

+0

잘 그 방법은 여전히 ​​유효합니다. select 문의 반환 값을 확인하여 메타 데이터 테이블의 존재를 확인하면됩니다. 그런 다음 존재하지 않는다면 하나를 만듭니다. –

답변

12

sqlite는 user_version 속성으로 지원되는 항목을 지원하므로 PRAGMA user_version을 실행하여 응용 프로그램 db의 현재 스키마 버전을 쿼리 할 수 ​​있습니다. 이 쿼리는 앱이 시작될 때 처음에 작성 될 수 있습니다.

이 user_version을 업데이트하려면 다음과 같은 업데이트 쿼리 PRAGMA user_version = version_num을 실행하십시오.

sqlite db를 만들 때마다이 속성 user_version을 넣는 것이 가장 좋습니다. 따라서 나중에 업그레이드 할 때 현재 값을 쿼리 할 수 ​​있습니다. 스키마 버전을 업그레이드하기 위해 필요한 것이 무엇인지 확인하고 나머지 변경 또는 테이블 작성을 실행하십시오.

예를 들어

: 첫 번째 릴리스에서

내가 COL1과 표를 작성, COL2

나는 표를 작성하는 SQL을 실행하고이 성공적으로 완료되면, 난 = 1. 그래서이 표시됩니다 프라 그마 user_version을 실행 내 현재 스키마 버전은 내가, 2

내가 첫 번째 쿼리의 user_version 내 스키마 버전을 변경할 필요가 값의 확인은 1 인 경우, 당신은 변경 실행해야 내가 새로운 COL3를 추가 릴리스에서 1

입니다 추가 할 스크립트 새 열 및 사용자 버전을 2로 설정하십시오.

이전에 user_version을 설정하지 않았으므로 새 설치 대 업그레이드 시나리오를 구별하는 것이 어려울 수 있습니다. 그래서 지금은 db가 존재한다고 가정 할 수 있습니다. 업그레이드 시나리오이고 alter script를 실행하고 존재하지 않는다면 새로운 설치 시나리오를 가정하고 create script를 실행하십시오. 그러나 위에서 언급 한 pragma를 사용하여 향후 문제를 해결할 수 있는지 확인하십시오.

+0

은 데이터베이스 스키마를 업데이트하고 유지 관리하는 좋은 방법 인 것 같습니다. 나는 이것을 시도하지 않을 것입니다. –

-1

이전 DB 인 경우 시작을 확인할 수 있으며 새 구조체 (임시 이름 포함)로 새 DB를 만드는 루틴이 있으면 이전 데이터에서 새 데이터로 모두 복사 한 다음 닫습니다. 이전 db & 삭제하고 새 db를 닫은 다음 이름을 바꾼 다음 마지막으로 다시 열어서 업데이트 된 응용 프로그램을 사용하십시오. 쉽고 빠르며 & 당신은 SQLite에 대한 심층적 인 지식이 필요하지 않습니다.

+0

하지만 사용자가 1.0에서 1.1로 업그레이드 한 경우에만이 작업을 수행하려고합니다. 당신이 말하는 접근법은 app delegate에서 appDidFinishLaunching 메소드로 구현 될 것이므로이 코드 라인은 앱을 시작할 때마다 실행될 것입니다. 권리??? 그래서, 나는 sqlite 데이터베이스의 버전 번호와 같은 것을 필요로한다. – anshul

+0

그렇지 않습니다. db가 새로운 구조인지 확인해야합니다. – SomaMan

관련 문제