オブジェクトの最終変更時刻または最終アクセス時刻を示すフィールドを追加したいと考えています。そうするための簡単な自動更新方法はありますか?
2 に答える
最後に変更されたタイムスタンプをサポートするために SQLite を使用する方法がわかりません。ただし、ORMLiteの機能の 1 つはバージョン フィールドです。Date
フィールドを でマークするversion = true
と、更新されるたびにDate
最新の値に更新されます。詳細については、次のドキュメントを参照してください。
したがって、次のようなものをクラスに追加します。
@DatabaseField(version = true)
Date modificationDate;
これが作成日と変更日の両方でうまく機能することを確認しました。また、これは、アップグレードを行うと、更新ステートメントの最後に次のようなものが自動的に追加されることを意味します。
UPDATE yourclass SET ... >>> WHERE modificationDate = existing-date; <<<
詳細については、ドキュメントを参照してください。ああ、それを long として保存したい場合は、代わりに次のようにすることができます:
@DatabaseField(version = true, dataType = DataType.DATE_LONG)
Date modificationDate;
sqlite で挿入と更新が発生するたびに modificatoinDate を更新するトリガーを作成できます。
例:
db.execSQL("create trigger updateModDate " +
"after insert on MY_TABLE for each row begin " +
"update MY_TABLE set modificationDate = date('now') where id = NEW.id " +
"end;");
db.execSQL("create trigger updateModDate " +
"after update on MY_TABLE for each row begin " +
"update MY_TABLE set modificationDate = date('now') where id = NEW.id " +
"end;");
トリガーは、Android で使用される sqlite データベースで利用できると思います。これらの更新プログラムが機能することは確認していませんが、透過的なソリューションである可能性があります。
最終アクセス時間についてはわかりません。選択が実行されるたびに更新を行わなければならないパフォーマンスを見たくありません。