2009-12-15 8 views
4

방금 ​​SQLite를 사용하기 시작했으며 파일이 이미 있는지를 모르고 모든 응용 프로그램 데이터를 파일에 쓰려고합니다. '정상적인'파일을 사용하면 이것은 간단하지만 SQLite를 사용하면 이미 존재하는 테이블을 만들 수 없으며 기본 키가 이미 존재하는 경우 행을 삽입 할 수 없습니다.SQLite 파일의 내용을 어떻게 덮어 쓸 수 있습니까?

기본적으로 "CREATE TABLE IF NOT EXISTS table .... else ... DELETE FROM table"과 같은 작업을 수행하려고합니다. 그것을 할 수있는 방법이 있어야합니다, 나는 다른 사람들보다 더 효율적인 몇 가지 방법이 있다고 생각합니다. 예를 들어, 삭제 및 재 작성보다는 기존 테이블을 사용하는 것이 더 좋을 것이라고 생각할 수 있습니다. 그러나 이는 존재하는 경우 검사하고 그 내용을 삭제하는 것과 관련되어 있습니다.

또는 (sqlite3_open (": memory :", db)) 메모리에 데이터베이스를 쓰는 방법이 있습니까? 그렇다면 그 내용을 바이트 배열 또는 기타 형식으로 파일에 기록하는 방법이 있습니까?

답변

7

모든 데이터베이스 시스템의 경우 테이블을 먼저 삭제 한 다음 다시 작성하는 것이 더 효과적입니다. DELETE를 사용하려면 인덱스 업데이트 등이 필요하지만 간단한 DROP은 인덱스를 제거하는 반면 트랜잭션 로그 엔트리는 만들지 않습니다 SQLite의 경우 DROP IF EXISTS를 사용하여 조건부 테이블을 삭제할 수 있습니다.

1

비어있는 완전히 설계된 데이터베이스 파일을 어딘가에 준비하면 어떨까요? 그런 다음 의도 한 앱 데이터 데이터베이스가 존재하지 않으면 빈 db 파일을 복사하여 만듭니다.

1

응용 프로그램 데이터를 다시 쓰기 전에 (예를 들어 사용자 설정) 응용 프로그램 데이터를 읽으려면 데이터가 존재하는지 여부를 알 수 있습니다. 예외 처리에 싸여 테이블에 통화를 시도하고 존재하는 경우 당신은 알 - 교대로 존재하는 것을 당신에게 데이터베이스 테이블을 사용 : 당신은 모든 단지 쉽게 할 수있는 기존의 DB 파일을 덮어 쓰려면

SELECT name FROM sqlite_master 
WHERE type='table' 
ORDER BY name; 

디스크에서 db 파일을 삭제 한 다음 작성 코드를 실행하십시오. - simples - 아무 곳이나 드롭 호출을 사용하지 마십시오. DB간에 버전이 변경되는 것에 대해 걱정할 필요가 없습니다.

관련 문제