0

私のアプリケーションには、トランザクション内で SQLite データベースに対して常にデータを送受信し、完了するとトランザクションをコミットするスレッドがあります。

同時に、アプリケーションが実行時間の長いクエリを実行すると、書き込みスレッドがブロックされたように見え、データが書き込まれません。各メソッドは同じ接続オブジェクトを使用します。

SQL (nolock) クエリに相当する方法、または読み取りがテーブルをロックしないようにする他の方法はありますか?

ありがとう!

4

1 に答える 1

0

概念エラーがあります。SQLite は次のように動作します。

従来の File/Open 操作は、sqlite3_open() を実行し、BEGIN TRANSACTION を実行してコンテンツへの排他的アクセスを取得します。File/Save は COMMIT を実行し、その後に別の BEGIN TRANSACTION が続きます。トランザクションを使用することで、アプリケーション ファイルへの更新がアトミックで耐久性があり、分離され、一貫性があることが保証されます。

というのは、実際にはそのように作業する必要がないからです。SQLite で動作するようにアルゴリズムを再考する必要があると思います。それがあなたの接続がブロックされた理由です。

詳しくは:

使用するとき。

よくある質問

SQLite でのスレッドの使用: 避けてください!

于 2012-08-15T21:18:29.670 に答える