0Pricing
Android Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. EntityとDAO
  2. Room Databaseクラス
  3. クエリとリレーションシップ
  4. Flowでデータを監視する
← Android Academyに戻る