面试题答案
一键面试创建数据库步骤
- 添加依赖:在
build.gradle
文件中添加Room相关依赖,如:
implementation "androidx.room:room-runtime:2.4.3"
annotationProcessor "androidx.room:room-compiler:2.4.3"
- 定义数据库类:继承
RoomDatabase
,并使用@Database
注解。例如:
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
- 获取数据库实例:通过
Room.databaseBuilder()
方法构建数据库实例,通常在应用的Application
类中进行初始化。例如:
class MyApp : Application() {
companion object {
lateinit var database: AppDatabase
}
override fun onCreate() {
super.onCreate()
database = Room.databaseBuilder(
applicationContext,
AppDatabase::class.java,
"app_database"
).build()
}
}
创建实体类步骤
- 定义类:创建一个普通的Kotlin类来表示数据库中的表。
- 使用
@Entity
注解:标记该类为实体类。例如:
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class User(
@PrimaryKey
val id: Int,
val name: String,
val age: Int
)
创建数据访问对象(DAO)步骤
- 定义接口:创建一个接口,用于定义数据库操作方法。
- 使用
@Dao
注解:标记该接口为DAO。例如:
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Query("SELECT * FROM User")
suspend fun getAllUsers(): List<User>
}
实体类中定义主键
在实体类中,使用@PrimaryKey
注解标记类中的某个属性作为主键。如上述User
实体类中,id
属性被标记为@PrimaryKey
,表示它是User
表的主键。若主键自增长,可以使用@PrimaryKey(autoGenerate = true)
。例如:
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class User(
@PrimaryKey(autoGenerate = true)
val id: Int,
val name: String,
val age: Int
)