尝试为新实体/表使用自动迁移后,我发现了此错误。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.sharetrip.b2b, PID: 8861
java.lang.IllegalStateException: Migration didn't properly handle: QuickPassenger(net.sharetrip.b2b.view.more.model.QuickPassenger).
Expected:
TableInfo{name='QuickPassenger', columns={passportNumber=Column{name='passportNumber', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, lastName=Column{name='lastName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, wheelChair=Column{name='wheelChair', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, gender=Column{name='gender', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, mealPreference=Column{name='mealPreference', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, mobileNumber=Column{name='mobileNumber', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, dateOfBirth=Column{name='dateOfBirth', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, firstName=Column{name='firstName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, seatPreference=Column{name='seatPreference', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, titleName=Column{name='titleName', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, nationality=Column{name='nationality', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, frequentFlyerNumber=Column{name='frequentFlyerNumber', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, passportCopy=Column{name='passportCopy', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, passportExpireDate=Column{name='passportExpireDate', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, id=Column{name='id', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=1, defaultValue='null'}, visaCopy=Column{name='visaCopy', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, travellerType=Column{name='travellerType', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}, email=Column{name='email', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[]}
Found:
TableInfo{name='QuickPassenger', columns={}, foreignKeys=[], indices=[]}
at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:103)
迁移发生时,似乎找不到任何列。我声明我的完整性如下。
@Entity
data class QuickPassenger(
@PrimaryKey
@ColumnInfo(name = "id")
var id: String,
var titleName: String?,
var firstName: String?,
var lastName: String?,
var gender: String? = Gender.male,
var nationality: String = "BD",
var dateOfBirth: String?,
var passportNumber: String?,
var frequentFlyerNumber: String?,
var passportExpireDate: String?,
var seatPreference: String?,
var mealPreference: String?,
var wheelChair: String?,
var passportCopy: String?,
var visaCopy: String?,
val travellerType: String?,
val email: String?,
val mobileNumber: String?
)
我用的是2.4.0-alpha04版本的room for all
androidx.room:room-compiler
androidx.room:room-ktx
androidx.room:room-runtime.
任何帮助都非常感谢。
它与数据库版本和架构相关。创建实体(或其他数据库架构更改)后,如果在不增加数据库版本或定义自动迁移的情况下生成并运行项目,则应用数据库可能会损坏。
因此,您需要增加数据库版本(例如,从 v1 增加到 v2)并首先定义自动迁移(作为文档),然后生成并运行项目。
在你的情况下(应用数据库可能已损坏),我建议你卸载应用,回滚(或存储)更改,运行项目,再次应用所有实体创建和自动迁移内容,然后重新运行项目。
但在重新运行之前,请确保您的旧数据库架构文件未更改(查找文件 1.json
作为我的示例)。相反,通过增加数据库版本并重新运行项目,应该自动生成新的数据库架构文件(查找文件 2.json
作为我的示例)。
注意)官方的Google docs可能已经过时了(撰写本文时就是这种情况!),所以我可以提供这篇关于房间自动迁移的文章。
错误:java.lang.IllegalStateException:迁移未正确处理:insta_alerts(org.altruist.bajajexperia.models.ceInstaViewDetailSDTo)。 预期:
如果运行,它会失败 未找到基表或视图:1146表*.迁移不存在。 数据库是空的。 如果我运行我会看到迁移表,但它是空的。 DB显示迁移表,但它是空的。 如果我再次运行,数据库再次为空,我会得到相同的错误: 未找到基表或视图:1146表*.迁移不存在。 也许有人知道这里发生了什么。
我在stackoverflow中搜索了一个类似的问题,但没有找到,不同情况下的其他可能解决方案也不适合我。我打开这个问题是因为我找不到这个问题的解决方案,也找不到这个问题的类似问题。 我尝试过使用Android Room的自动迁移功能,但它从未正常工作。 目前的情况如下: 我有一个数据库版本1 我想向一个表添加一个新列,这是我想做的唯一修改。此列将保存字符串值,而不保存其他任何内容。 此新列将仅存
找到:TableInfo{name='news',Columns={alias=Column{name='alias',Type='text',affinity='2',notnull=false,PrimaryKeyPosition=0,DefaultValue='null'},Selected=Column{name='select',Type='integer',affinity='3',n
并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。
我想将我的项目迁移到空安全,但是dependecie不支持空安全: