3

そこで、アプリのストレージ メカニズムとしてhttp://www.mapdb.orgを使用することについて疑問に思っていました (Java のデータ層の未来を表していると信じているためですが、脱線します)。

ただし、スキーマの進化はまだサポートされていません。そのため、その間、永続化されたクラスのフィールドを変更すると、クラスが壊れてしまいます。アップグレードされたアプリは、クラスの新しいバージョンで既に出荷されているため、データを更新することはできません。

私が必要としているのは、更新が発生したときのトリガーであるフックであり、古いバージョンが一時的な形式 (xstream xml) でデータを出力できるため、新しいバージョンは問題なく続行できます。プレイストアはこのようなものをサポートしていますか?

この SQLite onUpgrade()の ような質問は、onUpgrade があることを示唆しているようですが、その時点でクラスのスキーマが壊れているため、手遅れだと思います。独自のアプリ内準備を提供する場合、プレイストア アップグレード メカニズムが実行される前にこれが実行されることを保証するものは何もありません。

更新: onUpgrade は sqlite のものであり、参照されている質問の Android のものではないことに気付きました。私の間違い

また、強調するために、この質問はクラスのシリアル化されたバージョンが重要であり、スキーマの進化をまだサポートしていないオブジェクト データベースに言及しています。

4

2 に答える 2

0

この回答で概説されている SQLite onUpgrade アクションと手順について不明な点は何ですか?

スキーマが変更され、変更が何であるかがわかるので、必要に応じてテーブルを変更する (列を追加/削除し、新しい列に入力する) などの SQL (おそらく生の SQL) を記述します。

DB からデシリアライズすることを指している場合を除き、「クラスが変更された」という意味がわかりません。その場合、a) 古いクラスにまだアクセスできます。b) 新しいクラスがどのように見えるかを知っています。 、したがって、上記のように、データを古いものから新しいものに移動するコードを記述します。

私が抱えていた唯一の問題は、「not null」制約を持つ列を追加しようとすることです.sqliteではそれができないためです(つまり、テーブルを変更してnull値を持つ列を作成するため、制約に違反します) )。(私は制約を削除しましたが、更新を伴うより複雑なalter tableステートメントも機能した可能性があります)

于 2013-10-02T14:15:04.567 に答える