2012-11-05 5 views
5

데이터베이스로 구성된 안드로이드 앱을 개발했습니다. 모바일에 설치하면 처음으로 잘 작동합니다. 이전에 설치 한 버전을 제거하지 않고 데이터베이스를 변경하고 다시 설치하면 충돌이 발생합니다.데이터베이스에 몇 가지 변경 사항이있을 때 Android 앱이 다운 됨

참고 : 나는 내가 이전에 저장된 데이터

어떤 제안 친구를 유지하기를 원하기 때문에 내 이전 버전을 제거 싶지 않아?

+0

개미 이름을 만들거나 변경하면 충돌이 발생하므로 앱을 제거하고 새 앱을 설치하십시오. –

+0

이전 데이터를 삭제하고 싶지 않습니다. – Govind

답변

0

열을 추가하는 것과 같이 변경 한 경우 전체 제거 또는 데이터베이스 버전 업그레이드가 필요합니다. 당신은 데이터베이스 구조를 변경할 때 1 데이터베이스 버전 번호를 증가

+0

데이터베이스 버전을 늘리는 방법을 알려주십시오. – Govind

+0

우리는 더 많은 도움을 줄 수 있도록 약간의 코드를 게시하십시오 – tyczj

+1

사실 저는 code.I을 통해 데이터베이스를 생성하지 않고 있습니다. Sqlite 브라우저를 사용하여 생성 한 db에 연결하고 있습니다. db = this를 사용하여 코드로 연결합니다.openOrCreateDatabase (DB_NAME, MODE_PRIVATE, null); 문자열 selectQuery = "SELECT COUNT (*) FROM"+ TABLE_TRIP; 커서 c = db.rawQuery (selectQuery, null); – Govind

2

에 저장하기 위해 임시 데이터베이스를하여 먼저 데이터를 백업하지 않는 한

어느 쪽이든 당신은 테이블의 모든 데이터가 손실됩니다. (즉, 새 열 추가, 존재 열 제거, 열 데이터 유형 변경, 열 이름 변경 등).

db 헬퍼 클래스의 onUpgrade() 메소드 안에 두 줄 아래에 입력하십시오.

db.execSQL("DROP TABLE IF EXISTS your_table_name_goes_here"); 
onCreate(db); 

매번 데이터베이스의 현재 버전 번호를 확인합니다. 현재 데이터베이스 버전과 이전 버전간에 불일치가 발견되면 onUpgrade() 메소드를 실행하여 데이터베이스를 업그레이드하기 만하면됩니다. 그래서 우리는 모든 테이블을 드롭하고 새로운 테이블을 다시 만듭니다. 이제 db로 작업하는 동안 'n'개의 열을 추가/제거 할 수 있습니다. db 구조를 변경할 때 버전 번호를 1 씩 증가시키고 실행하면됩니다. 당신은 아마이 contructors 경우 하나를 사용하는 데이터베이스를 만들 때

+0

이렇게하면 이전에 저장 한 데이터를 잃어 버리게됩니다. 그렇습니까? – Govind

+0

예. 이전 데이터가 손실됩니다. 나는 앱을 개발하는 동안 이전 데이터를 잃어 버리는 것이 큰 문제라고 생각하지 않는다. – Santhosh

+1

사실 내 애플 리케이션을 시작할 준비가되었습니다. 내 데이터베이스를 변경 한 다음 문제가 발생하면 – Govind

2

: 당신이 볼 수 있듯이, 변수 dbVersion

public TimePointsSQLiteHelper(Context context, String name, 
          CursorFactory factory, int version) { 
    super(context, dbName, factory, dbVersion); 
} 

private TimePointsSQLiteHelper(Context context) { 
    super(context, dbName, null, dbVersion); 
} 

을, 이것은 당신이 피하기 위해 데이터베이스의 버전을 나타내는 하나입니다 당신이 가진 문제. 제안으로 최종 static int 변수를 사용하여 데이터베이스의 버전/번호를 오래된 것으로 변경하면 쉽게 변경할 수 있습니다. 예컨대 :

public final static int dbVersion = 1; 

그런 다음 당신은 현재 응용 프로그램 및 데이터에 변경 사항을 적용하기 위해 onUpgrade(...) 및/또는 onDowngrade(...)을 overrite한다.

그것을 할 수있는 가장 간단하고 빠른 방법은 바로 모든 테이블을 삭제하고 다시 만들 언급 한 @SANTHOSH입니다 :

db.execSQL("DROP TABLE IF EXISTS your_table_name"); 
onCreate(db); 

당신이 당신의 현재 데이터를 잃게됩니다 이 솔루션이 조심 저장 귀하의 데이터베이스에. onUpgradeonDowngrade에 논리를 추가하여 한 버전의 데이터베이스에서 다른 버전의 데이터베이스로 유지하려는 경우이를 마이그레이션해야합니다.

관련 문제