別のデータベースが必要です。SQLite は同時書き込み接続を処理できません。同時読み取りのみ。
SQLite は、ローカル/クライアント ストレージの組み込みデータベースとして適していますが、異なるスレッド/PC からの接続が必要な場合は、Sql Server Expressなどの別のソリューションが必要です。
SQLite を使用する必要がある場合は、書き込み時に Access Denied Exception をキャッチし、構成可能なタイムアウトが期限切れになるまで自動的に取得するメカニズムを設定する必要があります。
SQLiteのドキュメントに記載されているように
SQLite が別のプロセスによってロックされているファイルにアクセスしようとすると、デフォルトの動作は SQLITE_BUSY を返すことです。
SQLITE_BUSY をテストします。ソリューションを説明するための疑似コードを次に示します。
while (continueTrying) {
retval = sqlite_exec(db, sqlQuery, callback, 0, &msg);
switch (retval) {
case SQLITE_BUSY:
Log("[%s] SQLITE_BUSY: sleeping fow a while...", threadName);
sleep a bit... (use something like sleep(), for example)
break;
case SQLITE_OK:
continueTrying = NO; // We're done
break;
default:
Log("[%s] Can't execute \"%s\": %s\n", threadName, sqlQuery, msg);
continueTrying = NO;
break;
}
}
return retval;
SQLite マルチスレッド リファレンス