2011-02-25 7 views
1

안드로이드 앱과 함께 SQLite 데이터베이스를 배포하는 방법에 대한 자습서가 많이 있습니다. 나는 또한 .apk가 서명 되었기 때문에 런타임 중에 자산 폴더에서 파일을 삭제할 수 없다는 것을 알게되었습니다.
이제 매주 내 앱에 대해 업데이트 된 데이터베이스를 제공하고 싶습니다. 내 계획은 APK를 업데이트하고 시장에 게시하는 것이 었습니다. 분명히 모든 프로그램을 시작할 때 데이터베이스를 자산 폴더에서 응용 프로그램의 데이터베이스 폴더로 복사하고 싶지는 않습니다. 새로운 데이터베이스가 이전 데이터베이스보다 큰지 알아보기 위해 파일 크기를 비교해 보았습니다. 그러나 많은 데이터를 추가하거나 변경하지 않으면 크기가 그대로 유지됩니다. 내 질문은 : 첫 번째 설치 후 또는 응용 프로그램 업데이트 후에 만 ​​데이터베이스를 복사하는 현명한 방법은 무엇입니까?안드로이드 데이터베이스를 한 번만 배포

(나는 안드로이드 개발에 아주 익숙하다. 어쩌면 내가 끔찍한 명백한 해결책을 안다면 나를 용서한다.) 나는 보통 질문을하기 전에 내 대답을 찾으려고 노력한다.하지만 여기서 나는 해결책을 찾지 못했다.)

답변

3

답변은 필요하지 않습니다.

onCreate(SQLiteDatabase db); 
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion); 

이 꽤 많이 처리 할 수있을만큼 모든 문제 : 당신이 당신의 데이터베이스를 구현하기 위해 SQLiteOpenHelper를 사용하는 가정, 두 재정의를 가지고있다. 오픈 헬퍼를 만들 때 '필수'데이터베이스 버전을 제공해야합니다. 그것은 이전에 귀하의 응용 프로그램의 DB를 가지고 여부, 자동으로 장치를 감지합니다. 그래서, 세 가지 상황이있을 것이다 :

  1. 없음 DB는 발견 => 전화에서 onCreate를 (대부분의 아마 깨끗한 앱의 설치입니다)()
  2. DB가 발견되고 매치 버전 => 없음 재정 위
  3. DB를 찾을 수 있지만 호출 원하는보다 낮은 버전 => 전화 onUpgrade를 (앱을 업데이트 한 후 DB 구조 변경해야 할 가정)()

당신의 경우에는 귀하의 응용 프로그램을 업데이트 그러나 db의 구조는 변경 될 필요가 없으며, (2) db와 데이터가 남아있게됩니다.

+0

큰 도움이됩니다. 이제 저는 집중할 게 있습니다. 감사! – twittfort

0

Android Developers 웹 사이트의 NotePadProvider.java 예를보세요. 기본적으로 데이터베이스 버전을 업데이트 할 때마다 SQLUpenHelper 클래스에서 onUpgrade 메서드가 호출됩니다. 찾고있는 논리를 해당 메소드에 삽입하십시오.