2016-11-25 12 views
5

내 Android 앱에 SQLite 데이터베이스와 콘텐츠 공급자가 있습니다. 이 콘텐츠 제공자는 앱의 AndroidManifest.xml에 등록되어 있습니다. 내 보낸 앱이 아니기 때문에 내 앱에서만 볼 수 있습니다.콘텐츠 공급자를 사용할 때 데이터베이스 다시 만들기

사용자 프로필을 재설정하는 과정에서이 데이터베이스를 완전히 지우고 처음부터 다시 만들고 싶습니다. 처음에는 활동의 컨텍스트에서 deleteDatabase()으로 전화를 걸었습니다. 이 기능은 앱이 종료 된 후 다시 열리는 경우에만 작동합니다. 그렇지 않으면 데이터베이스가 읽기 전용이라는 행을 삽입하려고하면 충돌이 발생합니다. 제 이해는 deleteDatabase()에 전화하기 전에 연결을 먼저 닫아야한다는 것입니다. 그러나 연결은 콘텐츠 공급자가 관리하므로 내가 이해하는 한 수동으로 닫지 않아야합니다.

대신 ContentResolvercall() 메서드를 사용하여 테이블의 모든 데이터를 삭제하고 시퀀스 수를 수동으로 재설정하는 사용자 지정 함수를 호출합니다.

이 방법은 작동하지만 지금은 수동으로 각 테이블에서 데이터를 삭제해야하며 이후에 변경 한 사항을 추적해야합니다.

ContentProvider를 사용할 때 내 DatabaseHelper ( SQLiteOpenHelper) 트리거의 onCreate()을 전체 데이터베이스를 삭제해야하는 더 좋은 방법이 있나요?

+0

왜 모든 콘텐츠를 삭제하지 않고 다시 만들고 싶습니까? –

+0

@DiegoTorresMilano 각 테이블/행을 삭제하지 않고 (그러므로 deleteDatabase를 호출하려고하지 않고) 새 상태로 데이터베이스를 신속하게 새로 고치려고하고 초기 설정 프로세스가 처음으로 새 프로파일을 다시 구성하게하려고한다고 가정합니다 운영. 현재 모든 데이터 행을 삭제할 예정입니다. deleteDatabase를 호출하는 것과 비슷한 기능이 있다면 궁금합니다. – Programmer001

+0

파일이 아직 열리는 동안 삭제하려고 시도해서는 안됩니다. –

답변

1

사용자 지정 기능을 사용하여 테이블을 삭제하고 다시 작성하는 것이 좋습니다. onCreate()의 표를 생성하는 코드는 이미 DatabaseHelper입니다. DatabaseHelper과 사용자 지정 방법으로 액세스 할 수있는 곳을 리팩터링하십시오.

+0

오른쪽. deleteDatabase가 작동하지 않은 후에는 테이블을 삭제 한 다음 시작하여 모든 행을 삭제하고 onCreate를 호출하는 대신 시퀀스 카운트를 재설정하기로 결정했습니다. 귀하의 답변도 효과가 있습니다. 디에고에 대한 내 대답을 좀 더 추론 해 보라. 다른 대답이 없다면 대답으로 받아 들일 수 있습니다. – Programmer001