2

SQLite データベースで同時実行を実現するには? ドキュメントによると、WAL(Write-Ahead Logging)を使用して可能です。しかし、実装方法がわかりません。

私のアプリでは、メイン スレッドで db からデータを読み取りたいと同時に、バックグラウンド スレッドが同じテーブルにいくつかのデータを書き込み/挿入しています。読み取りクエリと書き込みクエリを同時に実行すると、挿入が完了するまでアプリが応答を停止します。SQLite で同時実行は可能ですか?

4

5 に答える 5

2

先行書き込みロギングを有効にするには、SQLiteOpenHelper 派生クラスのonConfigure() コールバックで enableWriteAheadLogging ()を呼び出すだけです。

于 2015-12-22T12:41:05.513 に答える
0

「メインスレッドで db からデータを読み込みたい」: -> 絶対にしないでください。データベースの読み取り呼び出しが実行されるまで、UI がハングします。常にバックグラウンド スレッドで実行します。

私の理解によると、SQLite は並行性自体を処理するので、心配する必要はありません。

Content Providerそのメソッドを使用してデータベースを更新するために使用できますinsert()。挿入が完了したら、メソッドContent Observerで次のコードを使用して、データベースの変更についてすべてのレジスタに通知できます。insert()

getContext().getContentResolver().notifyChange(uri, null);

の作成、登録、および登録解除用ContentObserver。ここをクリックしてください

バックグラウンド スレッドまたは からすべてのコンテンツ プロバイダ関連の操作を呼び出してくださいAsyncQueryHandler。詳細については、AsyncQueryHandler こちらをご覧ください。

詳細が必要な場合、または役立つ場合はお知らせください:)

于 2015-12-22T07:24:16.200 に答える
0

オブジェクトのシングルトン オブジェクトを使用する必要がありDataBaseます。この目的のために、 を使用できますContentProvider。これは、同時実行を実現するためのより良いオプションです。

http://www.vogella.com/articles/AndroidSQLite/article.htmlのチュートリアルへのリンクは次のとおりです。ContentProvider

ドキュメントも参照できます http://developer.android.com/guide/topics/providers/content-providers.html

于 2015-12-22T06:16:20.163 に答える