Androidの永続ストレージをマスターする:KotlinとRoomデータベース実践講座

前言

1.必要に応じて使用するRoomライブラリを導入します。
2.Roomの主なコンポーネントは以下の三つです:Entity、DAO、Database
3.クエリがUIをブロックするのを防ぐために、Roomはメインスレッドでのデータベースアクセスを許可しません。

実装
1. Entityの作成


Roomの@Entityアノテーションを使用してデータベースのテーブルを作成できます。
@PrimaryKeyアノテーションは各データセットにユニークなプライマリキーを作成します。
テーブルの列を変数として命名することもできます。例:id
また、@ColumnInfo(name = “name”)を使用して列名を指定することもできます。

2. DAOの作成


Roomの@Daoアノテーションを使用して、データベース操作の方法を作成できます。
例:@Insert :テーブルに挿入できます。
@Query :カスタムSQLを実行できます。
一般的なSQLの使用方法については、公式ドキュメントを参照してください。
@Delete :データを削除します。
@Insert(onConflict = OnConflictStrategy.REPLACE) :衝突するプライマリキーがある場合、無視せずに置き換えます。
@Update: データを更新します。

3. Databaseの作成


@Databaseを使用してRoomDatabaseを作成します。
entitiesは作成するデータテーブルです。
versionは更新バージョン用です。

4.Build Database


直接以下のコードを使用して、RoomDatabaseのインスタンスを取得します。

5.実際にRoomを操作する


前に書いたDAOを使って直接操作します

その他の使い方
非同期DAOの使い方
サポートの程度

1.Room 2.1はsuspend関数をサポートし、Coroutinesを使用します
2.Room 2.2はFlowをサポートします 3.その他にもRxJava、LiveData、Guavaなどをサポートしています。興味がある方は:公式ドキュメントをご覧ください

CoroutinesでRoomを操作する方法
Flow、LiveDataでRoomを操作する方法

上記の操作インターフェースを完了した後は、通常のcoroutines、flow、LiveDataの方法で使用できます

事前にデータベース内容を作成する.dbファイル

データベースにデフォルトデータを含めたい場合、データを格納する.dbファイルを事前に保存パスに埋め込み、createFromAssetを使用して作成します
またはFileを使用して作成したい場合は、.createFromFile(File(“mypath”))に変更します

タイプコンバーター

ネイティブでサポートされている変数タイプが不足している場合、カスタムしたい場合は、
@TypeConvertersを使用して
変数タイプを変換し、Roomで使用できるようにします。
例えば、RoomデータベースにDateを保存する必要がある場合、RoomはDateオブジェクトの保存方法を知りませんが、次のようにできます:

TypeConverterを作成する
DBに追加する
Roomで使用できるようになりました
Roomコードのいくつかの使用テクニック
1.tableNameをラベル形式で定義し、複数の主キーprimaryKeysをサポートする
2.Embeddedオブジェクトを作成し、data classで保存フィールドを作成する
3.データベースのリレーションを定義する

2つのテーブルがあります
特定のケースで2つのテーブルの対応するデータを取得して使用したい場合
対応する親、子エンティティを追加します。この例では、それぞれUserEntity、HistoryEntityです。
次に、@Relationを追加します。ここでは対応する一意のキー値(例えばprimaryKey)を指定します。
この例では、parentColumnはUserEntityのprimaryKeyに対応し、
entityColumnはHistoryEntityのprimaryKeyに対応します
最後にDAOに操作メソッドを追加します:
ここで@Transactionを追加することで、データの一貫性を保証できます。
データベースが複数の操作を行う場合、
例えばAテーブルを操作してからBテーブルを操作する場合、
途中でAテーブルが成功してBテーブルが失敗した場合、
返される結果が間違っている可能性があります。
したがって、@Transactionを使用することで、データの取得が全て成功するか、全て失敗するかのどちらかになり、
操作が途中で中断されることがなく、データの取得が不正確になることを防ぎます。

4.データベースのバージョン移行
  • 自動更新:@Database内のversionにAutoMigration (from = 1, to = 2)を追加することで、データベースはversionに従って自動的にバージョン移行します。
  • 手動更新:Migrationを使用して移行のSQLコマンドを定義します room 1 Room dbをビルドする際にMigrationを追加します。例えば:

You might also enjoy