# Andriod Studio RoomDB 1. 新增相依套件(build.gradle) 在 app/build.gradle 中加入: ``` implementation "androidx.room:room-runtime:2.6.1" annotationProcessor "androidx.room:room-compiler:2.6.1" // 如果使用 Kotlin kapt(推薦) kapt "androidx.room:room-compiler:2.6.1" // 可選:協程支援 implementation "androidx.room:room-ktx:2.6.1" ``` 2.定義 Entity(資料表)**你要存的資料** ``` import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "user_table") data class User( @PrimaryKey(autoGenerate = true) val id: Int = 0, val name: String, val age: Int ) ``` 3.定義 DAO(資料存取物件)**怎麼存、怎麼讀** ``` import androidx.room.* @Dao interface UserDao { @Insert suspend fun insert(user: User) @Query("SELECT * FROM user_table") suspend fun getAll(): List<User> @Delete suspend fun delete(user: User) } ``` 4. 建立 Database 類別 **唯一連線用的** ``` import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao companion object { @Volatile private var INSTANCE: AppDatabase? = null fun getDatabase(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "app_database" ).build().also { INSTANCE = it } } } } } ``` 5.在 ViewModel 或 Repository 中使用 ``` val db = AppDatabase.getDatabase(context) val userDao = db.userDao() CoroutineScope(Dispatchers.IO).launch { userDao.insert(User(name = "小明", age = 20)) val allUsers = userDao.getAll() } ``` **build.gradle 記得要加入:** ``` implementation "androidx.room:room-runtime:2.6.1" kapt "androidx.room:room-compiler:2.6.1" implementation "androidx.room:room-ktx:2.6.1" ``` 記得加這行(在 build.gradle.kts 或 build.gradle 中): ``` apply plugin: 'kotlin-kapt' ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up