SQLite データベースで同時実行を実現するには? ドキュメントによると、WAL(Write-Ahead Logging)を使用して可能です。しかし、実装方法がわかりません。
私のアプリでは、メイン スレッドで db からデータを読み取りたいと同時に、バックグラウンド スレッドが同じテーブルにいくつかのデータを書き込み/挿入しています。読み取りクエリと書き込みクエリを同時に実行すると、挿入が完了するまでアプリが応答を停止します。SQLite で同時実行は可能ですか?
SQLite データベースで同時実行を実現するには? ドキュメントによると、WAL(Write-Ahead Logging)を使用して可能です。しかし、実装方法がわかりません。
私のアプリでは、メイン スレッドで db からデータを読み取りたいと同時に、バックグラウンド スレッドが同じテーブルにいくつかのデータを書き込み/挿入しています。読み取りクエリと書き込みクエリを同時に実行すると、挿入が完了するまでアプリが応答を停止します。SQLite で同時実行は可能ですか?
先行書き込みロギングを有効にするには、SQLiteOpenHelper 派生クラスのonConfigure() コールバックで enableWriteAheadLogging ()を呼び出すだけです。
「メインスレッドで db からデータを読み込みたい」: -> 絶対にしないでください。データベースの読み取り呼び出しが実行されるまで、UI がハングします。常にバックグラウンド スレッドで実行します。
私の理解によると、SQLite は並行性自体を処理するので、心配する必要はありません。
Content Provider
そのメソッドを使用してデータベースを更新するために使用できますinsert()
。挿入が完了したら、メソッドContent Observer
で次のコードを使用して、データベースの変更についてすべてのレジスタに通知できます。insert()
getContext().getContentResolver().notifyChange(uri, null);
の作成、登録、および登録解除用ContentObserver
。ここをクリックしてください。
バックグラウンド スレッドまたは からすべてのコンテンツ プロバイダ関連の操作を呼び出してくださいAsyncQueryHandler
。詳細については、AsyncQueryHandler
こちらをご覧ください。
詳細が必要な場合、または役立つ場合はお知らせください:)
オブジェクトのシングルトン オブジェクトを使用する必要がありDataBase
ます。この目的のために、 を使用できますContentProvider
。これは、同時実行を実現するためのより良いオプションです。
http://www.vogella.com/articles/AndroidSQLite/article.htmlのチュートリアルへのリンクは次のとおりです。ContentProvider
ドキュメントも参照できます http://developer.android.com/guide/topics/providers/content-providers.html