【发布时间】:2020-11-21 21:49:42
【问题描述】:
目前我正在学习如何在 Android 中使用 Room。而我遵循的所有教程都只制作了一张表(即只有一个数据类)
如果我只想保存一个表,这里是数据库和 dao(即这里的 Note 对象)
这里是数据库数据类
@Database(entities = [Note::class], version = 1)
@TypeConverters(DataConverter::class)
abstract class NoteDatabase : RoomDatabase() {
abstract val noteDao: NoteDao
companion object {
@Volatile
private var INSTANCE: NoteDatabase? = null
fun getInstance(context: Context): NoteDatabase {
synchronized(this) {
var instance = INSTANCE
if (instance == null) {
instance = Room.databaseBuilder(
context.applicationContext,
NoteDatabase::class.java,
"note_database"
)
.fallbackToDestructiveMigration()
.build()
INSTANCE = instance
}
return instance
}
}
}
}
这就是道
@Dao
interface NoteDao {
@Insert
fun save(note: Note)
@Delete
fun delete(note: Note)
@Query("DELETE FROM note")
fun deleteAllNotes()
@Query("SELECT * FROM note ORDER BY priority DESC")
fun getAllNotes() : LiveData<List<Note>>
}
如果我想保存多个表怎么办,例如我想将 Note 和 Product 对象保存到两个表中。我的问题是
我是否需要创建两个不同的抽象类数据库,例如 NoteDatabase 和 ProductDatabase 以及两个 Daos,例如 NoteDao 和 ProductDao ?
如果我能把它结合起来,你能给我看看代码吗?
【问题讨论】:
-
每个表需要一个实体,
Database注释的entities属性需要将它们全部列出。每个实体是否有一个 DAO 或将它们组合起来取决于您——Room 不在乎。任何具有关系的示例都将显示多个实体,例如this。你不想要多个RoomDatabase类。
标签: android kotlin android-room android-jetpack