마이그레이션 기능을 사용하고 있습니다. 그것은 이전 테이블에서 데이터를 읽고 새로운 테이블에 삽입합니다. 그 모든 것들은 우선 순위가 낮은 백그라운드 스레드에서 작동합니다.동시에 선택 및 삽입하는 동안 sqlite 및 '제약 조건 실패'오류가 발생했습니다.
의사 코드의 내 단계.
sqlite3_prepare_stmt (select statement)
sqlite3_prepare_stmt (insert statement)
while (sqlite3_step (select statement) == SQLITE_ROW)
{
get data from select row results
sqlite3_bind select results to insert statement
sqlite3_step (insert statement)
sqlite3_reset (insert statement)
}
sqlite3_reset (select statement)
sqlite3_step (insert statement)
에 '제약 실패'오류가 항상 나타납니다. 왜 그런 일이 일어나고 어떻게 해결할 수 있을까요?
UPD : 배경 스레드가 주 스레드에서 열린 db 핸들을 사용하기 때문에 문제가 발생한다는 것을 알고 있습니다. 지금 그 추측을 확인하십시오.
UPD2는 :
sqlite> select sql from sqlite_master where tbl_name = 'tiles';
CREATE TABLE tiles('pk' INTEGER PRIMARY KEY, 'data' BLOB, 'x' INTEGER, 'y' INTEGER, 'z' INTEGER, 'importKey' INTEGER)
sqlite> select sql from sqlite_master where tbl_name = 'tiles_v2';
CREATE TABLE tiles_v2 (pk int primary key, x int, y int, z int, layer int, data blob, timestamp real)
감사합니다. 나는 나의 대답을 편집하고 좀 더 유용한 정보를 원했다. –