私のアプリケーションには、トランザクション内で SQLite データベースに対して常にデータを送受信し、完了するとトランザクションをコミットするスレッドがあります。
同時に、アプリケーションが実行時間の長いクエリを実行すると、書き込みスレッドがブロックされたように見え、データが書き込まれません。各メソッドは同じ接続オブジェクトを使用します。
SQL (nolock) クエリに相当する方法、または読み取りがテーブルをロックしないようにする他の方法はありますか?
ありがとう!
私のアプリケーションには、トランザクション内で SQLite データベースに対して常にデータを送受信し、完了するとトランザクションをコミットするスレッドがあります。
同時に、アプリケーションが実行時間の長いクエリを実行すると、書き込みスレッドがブロックされたように見え、データが書き込まれません。各メソッドは同じ接続オブジェクトを使用します。
SQL (nolock) クエリに相当する方法、または読み取りがテーブルをロックしないようにする他の方法はありますか?
ありがとう!
概念エラーがあります。SQLite は次のように動作します。
従来の File/Open 操作は、sqlite3_open() を実行し、BEGIN TRANSACTION を実行してコンテンツへの排他的アクセスを取得します。File/Save は COMMIT を実行し、その後に別の BEGIN TRANSACTION が続きます。トランザクションを使用することで、アプリケーション ファイルへの更新がアトミックで耐久性があり、分離され、一貫性があることが保証されます。
というのは、実際にはそのように作業する必要がないからです。SQLite で動作するようにアルゴリズムを再考する必要があると思います。それがあなたの接続がブロックされた理由です。
詳しくは: