我在我的Android应用程序中使用ROOM db。我在运行时创建多个DB,但我面临着为这些运行时数据库维护不同表的困难。在ROOM db中可以做到这一点吗?
abstract class AppDatabase : RoomDatabase() {
companion object {
private var mInstance: AppDatabase? = null
@Synchronized
fun getInstance(dbName: String): AppDatabase {
if (mInstance == null)
mInstance = Room.databaseBuilder(
OrbiApp.instance.applicationContext, AppDatabase::class.java,
dbName
)
.fallbackToDestructiveMigration()
.addCallback(roomCallback)
.build()
return mInstance!!
}
} ```
1条答案
按热度按时间qij5mzcb1#
是否可以在ROOM db中执行此操作?
是的,但是使用单个
@Database
注解类,就像您所做的那样,那么如果表是*不同的***,那么您将需要包括@Database注解所定义的实体列表中的所有表,以便无论预期的数据库是什么,都可以访问不同的**表。您还遇到了单个示例的问题,因此如果在后续调用中使用
getInstance
,即使数据库名称不同,它也只会返回第一个数据库。例如,如果您有:-
沿着:
结果将是一个数据库DB 1,但在尝试获取时,DB2的示例返回DB 1,行插入到***不同的***表中。例如
也许这就是您遇到问题的地方。您需要区分示例。
为了进一步演示,请考虑以下内容(对getInstance函数的更改+新的buildDB函数):
在没有任何其他变更的情况下,重新运行应用程序,然后:-
对于DB 1:-
对于DB2:-