android - android上的同一个数据库是否可以有多个文件dao?
问题描述
我想创建多个 DAOS 文件以更好地组织项目,即使我只有一个数据库。当我尝试按照这些方式做某事时,它会起作用:
@Database(version = 1, entities = [ContaBancaria::class])
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
}
}
但是,当我尝试这样的事情时,它不起作用:
@Database(version = 1, entities = [ContaBancaria::class, entity1, entity2,entity3 ....])
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
abstract fun dao1(): dao1
abstract fun dao2(): dao2
abstract fun dao3(): dao3
abstract fun dao4(): dao4
.
.
.
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build().dao1().dao2().dao3()....
}
}
}
我正在使用 koin 单例来创建我的数据库
val cacheDataModule = module {
single { CArchDatabase.createDatabase(androidContext()) }
factory<ContaBancariaCacheDataSource> {
ContaBancariaCacheDataSourceImpl(
contaBancariaDao = get()
)
}
}
解决方案
每个数据库 DAO 都必须有一个@Dao
定义操作的类(查看文档:https ://developer.android.com/training/data-storage/room#dao )
从您的代码中,我假设您已经有一个ContaBancariaDao
课程。如果要创建更多 DAO,则需要创建与该类类似的新类。
然后你只需要fun
在你的CArchDatabase
.
如果您还想添加新实体,请记住在注释中将它们添加到entities
数组中。@Database
@Database(entities = arrayOf(ContaBancaria::class, Other::class), version = 1)
abstract class CArchDatabase : RoomDatabase() {
abstract fun contaBancariaDao(): ContaBancariaDao
abstract fun otherDao(): OtherDao
companion object {
fun createDatabase(context: Context): RoomDatabase {
return Room.databaseBuilder(context, CArchDatabase::class.java, "CArchDatabase.db")
.fallbackToDestructiveMigration()
.build()
}
}
}
推荐阅读
- java - Spring Boot“无法执行 CommandLineRunner 错误”
- c++ - Makefile 的未定义符号问题
- navigator - navigator.connection 下行显示最大10Mbps
- javascript - 如何在javascript中的json响应上使用map函数?
- javascript - 带有字符串插值的 React.js 类名值
- android - 找到所需的转换:MaterialContainerTransform?
- odata - 循环通过 createEntry() 创建的对象列表并在执行 submitChange() 之前编辑它们的属性
- c# - 使用 iTextSharp 克服 200 英寸 adobe 错误
- azure-storage - 如何使用 PNS 反馈服务返回的“Azure 存储容器 URL”?
- javascript - 同时创建的可读文件流或可写文件流是否有最大限制?