2011-09-05 3 views
1

나는 약간의 튜토리얼을 읽고 몇 가지 검색을했지만 뭔가를 놓치고 있어야합니다. 지난 며칠 동안 내 아이폰 앱에서 sqlite와 다른 문제가 많았습니다. 동일한 테이블이 아닌 다른 테이블에 동시에 삽입 작업을 수행 할 때 가장 일반적인 문제가 발생했습니다.삽입/업데이트시 iphone에 sqlite가 전체 데이터베이스 또는 특정 테이블을 잠급니다?

그런데 스레드를 사용하여 여러 개의 삽입을 수행 할 수 있으므로 동시성이 보장됩니다.

그래서 DB는 전체 DB를 잠 그거나 정보를 삽입 할 테이블을 잠급니다.

나는 또한 충돌을 일으킬 수있는 다른 가능한 문제를 조사하고 있지만이 작은 정보는 많은 도움이 될 것입니다.

답변

1

다른 테스트가 끝나면 다른 테이블에있는 한 데이터베이스에서 동시에 여러 번 삽입 할 수 있다는 것을 분명히 말할 수 있습니다. 동일한 테이블에 동시에 여러 번 삽입하면 오류가 발생합니다. 이전에 발생했던 크래시는 내가 사용하고 싶은 각 뷰에 대해 init + alloc db를 할당 한 다음 각 뷰에서이를 릴리스하려고한다는 사실과 관련이있는 것으로 보입니다. 앱 위임자에 대해서만 init + alloc을 수행 한 후에는 충돌을 해결했습니다. App을 통해 동일한 DB의 인스턴스를 여러 개 가질 수 있지만 App Delegate에 하나만 있으면 필요에 따라 액세스하는 것이 더 바람직합니다. 이것은 완전히 정확하지는 않지만 수 시간 동안 검색하고 테스트 한 후에 내 결론이었습니다.

다른 사람들에게 도움이되기를 바랍니다.

0

5 가지 유형의 잠금이 있지만 모두가 테이블 잠금이 아니거나 행 잠금은 물론 database file과 관련되어 있습니다.

+0

인사말, 나는 그것을 보았다. 그러나 나는 나중에 그것에 대해 더 자세히 설명 할 것이다. 그러나 여전히 응용 프로그램이 충돌하거나 첫 번째 스레드가 완료 될 때까지 db 자체가 동시성을 처리 할 수 ​​있다면 두 번째 스레드가 동일한 테이블에 동시에 레코드를 삽입하려고하는지 궁금합니다. 그걸 통찰력있어? 덕분에 – ciTiger

0

완료되면 적절한 시간에 sqlite3_finalize를 호출하고 있습니까? sqlite3_finalize를 호출하지 못하면 sqlite를 사용하지 못하게 될 것입니다.

+0

인사말, 나는 모든 SQL 호출에 대한 래퍼를 사용하므로 다루었습니다. – ciTiger

관련 문제