2

iOS アプリケーションで sqlite3 を使用していますが、非常に奇妙な問題に何度も遭遇しました。

私は WAL を使用しており、すべての書き込みは一度に 1 つの操作のみを許可するマネージド スレッドで行われ、読み取りは別のデータベース ハンドルを使用し、すべて正常に動作します。私が見ている問題は、読み取りハンドルが、コミットされたデータを読み取れないこの奇妙な状態になることがあります。コミットされていない読み取りトランザクションがあるようです...

データベースに正常に書き込むことができ、結果を自分のコンピューターにエクスポートしたところ、新しく書き込まれた結果が問題なく表示されます。ただし、私の読み取りは、古い時点でデータベースにアクセスしているようです...スタックしているようです。アプリケーションを閉じて再度開くと、問題なく、新しくコミットされたデータが読み取られますが、アプリケーションがこの状態でどのように動けなくなっているのか疑問に思っています。

任意の助けをいただければ幸いです。前もって感謝します。

4

1 に答える 1

1

私はまったく同じ問題に遭遇しましたが、SQLite3 3.7.7.1 を搭載した Debian Lenny (カーネル 2.6.33) で発生しました。

データベース ファイルを削除して再作成した後、一部のプロセスが古い DB ファイル記述子にハングアップしていることが判明しました。

DBを再作成する前に、DBを使用するすべてのプロセスが強制終了されたことを確認して修正しました。

古いプロセスを取り除くことで、ファイル ハンドルも削除されました。

于 2012-11-20T00:11:43.677 に答える