0

この質問にはさまざまなバージョンがあることは知っていますが、私の問題に対する最善のアプローチについて明確な答えを得るのに苦労していました。

私がやっていることは、SD カードに SQLite データベースを作成していることです。そこからクエリを実行して書き込みできるようにしたい。

私が持っている質問は、SD カードがマウントされていないときに管理する最善の方法は何かということです。標準の MP3 プレーヤーのように、アプリケーションを閉じてもまったく問題ありません。ただし、データベースへの書き込みアクションが部分的に行われないようにしたいと考えています。

私が考えていたのは、beginTransaction を使用し、それを成功としてマークしてから、end transaction を呼び出すことです。私が持っている質問は、トランザクションの終了が呼び出されない場合にどうなるかです。それは潜在的にデータの破損につながる可能性がありますか? また、sd カードがアンマウントされているという通知を受け取るために何を聞くか、何にフックするかを理解するのに少し助けが必要です。

ありがとう

4

1 に答える 1

1

これは、データベース内のトランザクションの優れた点です。心配する必要はほとんどありません。

「SQLiteの単一のトランザクション内のすべての変更は、変更をディスクに書き出す動作がによって中断された場合でも、完全に発生するか、まったく発生しません。

プログラムのクラッシュ、オペレーティングシステムのクラッシュ、または電源障害。」

http://www.sqlite.org/transactional.htmlから取得

データベースが存在する削除されるディスクは、(最悪の場合)ディスクへのデータの書き込み中に電源障害のように動作するはずです。データベースは、次回の起動時にそのデータを破棄します。

したがって、commitまたはendトランザクションを使用してトランザクションがコミットされ、ステートメントを実行するメソッド呼び出しがすべてのデータを返すとすぐに、すべてのデータが保存されます。そうしないと、トランザクションからのデータは保存されません。どちらの場合も、一貫性のある状態になります。

唯一の落とし穴に注意してください。一緒に(つまりアトミックに)実行する必要のあるすべてのステートメントが1つのトランザクション内にあることを確認する必要があります。

于 2012-05-09T20:15:07.603 に答える