Room Databaseクラス
データベースを作成してアクセスします
「Room Databaseクラス」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
全体をつなげる
データベースクラスは主なアクセスポイントです。Entityを一覧にし、バージョンを宣言し、DAOを公開します。
@Databaseアノテーション
RoomDatabaseを継承するabstractクラスを作成し、@Databaseアノテーションを付けます。
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(
entities = [User::class],
version = 1
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}Entityとバージョンの一覧
entities配列で、Roomが作成するテーブルを指定します。version番号は、マイグレーションのためにスキーマの変更を追跡します。
DAOを公開する
各DAOについて、そのDAO型を返すabstract関数を宣言します。実装はRoomが生成します。
abstract fun userDao(): UserDao
abstract fun noteDao(): NoteDaoデータベースを構築する
Room.databaseBuilderを使ってインスタンスを作成します。アプリケーションコンテキスト、クラス、データベース名が必要です。
val db = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app.db"
).build()Singletonにする
データベースの作成にはコストがかかるため、アプリ全体で1つのインスタンスを作成します。一般的なパターンでは、companion objectと同期化されたgetterを使用します。
companion object {
@Volatile private var INSTANCE: AppDatabase? = null
fun get(context: Context): AppDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: build(context).also { INSTANCE = it }
}
}Singletonが重要な理由
複数のデータベースインスタンスがあると、同じファイルへの接続が複数開かれ、不整合やメモリの無駄が生じます。共有インスタンスを1つにすることで、信頼できる唯一の情報源を維持できます。
Hiltで提供する
実際のアプリでは、手動のSingletonではなく、通常は依存性注入(Hiltコースで扱います)を通じてデータベースを提供します。
@Provides
@Singleton
fun provideDb(@ApplicationContext ctx: Context) =
Room.databaseBuilder(ctx, AppDatabase::class.java, "app.db")
.build()スキーマの変更とマイグレーション
Entityを変更したら、versionを増やし、古いデータを変換するSQLを記述したMigrationを指定します。
val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER NOT NULL DEFAULT 0")
}
}破壊的マイグレーション
開発初期にはfallbackToDestructiveMigration()を使用することがあります。これはマイグレーションの代わりにテーブルを削除して再作成します。実際のユーザーデータがある本番環境では、絶対に使用しないでください。
DAOにアクセスする
データベースインスタンスを取得したら、DAOを取得し、そのメソッドをコルーチン内で呼び出します。
val dao = db.userDao()
viewModelScope.launch {
dao.insert(User(1, "Ada", "ada@x.com"))
}理解度チェック
データベースクラスについての理解度を確認しましょう。
まとめ
学んだこと:
@DatabaseはEntityを一覧にし、バージョンを設定し、DAOを公開します。Room.databaseBuilderでSingletonとして構築します。- スキーマを変更するには、バージョンを増やしてMigrationを追加する必要があります。
よくある質問
「Room Databaseクラス」レッスンは無料ですか?
はい。「Room Databaseクラス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「Room Databaseクラス」で何を学びますか?
データベースを作成してアクセスします ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Room Databaseクラス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- EntityとDAO
- Room Databaseクラス
- クエリとリレーションシップ
- Flowでデータを監視する