我对一个我无法解决的问题束手无策 - 尝试更改数据库中表的架构/数据时。我正在使用 Rooms .createFromAsset 方法预先填充数据库。
当前模式和数据(工作) - 如 DB Browser 中所示 - 这是用于预填充应用程序数据库的数据库。
当我使用以下代码构建数据库时:
val instance = Room.databaseBuilder(
context.applicationContext,
MetarDatabase::class.java,
"metar_database"
)
.createFromAsset("database/metar_database.db")
.fallbackToDestructiveMigration()
.build()
而这个数据类:
@Entity(tableName = "airport_table")
data class Airport(
@PrimaryKey(autoGenerate = false)
val icao : String,
val name : String?,
val municipality : String?,
val scheduled : Boolean,
val iata : String?
)
它成功地将数据库预填充到应用程序中:如 Database Explorer 所示:
问题是这样的:如果我尝试更改架构:添加列,删除列(通过更改 csv 文件并导入数据库浏览器中的新表来完成,然后重命名为 airport_table 并将一个添加到数据库版本),它不加载数据。
例如:(不预先填充):
@Entity(tableName = "airport_table")
data class Airport(
@PrimaryKey(autoGenerate = false)
val icao : String,
val name : String?
)
除了我认为不相关的“E/libc:访问被拒绝找到属性“ro.serialno””之外,我没有收到任何错误。
此外 - 更改这张表意味着我的另一张表不会预先填充。但是空数据库仍然成功创建,我可以在应用程序中添加它。
请帮助我 - 我已经查看了堆栈溢出的类似问题。有些是相似的,但涉及到让任何事情发生——我的问题是它只适用于我在测试时碰巧成功的一个确切的模式——但我想要另一个模式。
非常感谢,利亚姆