我在stackoverflow中搜索了一个类似的问题,但没有找到,不同情况下的其他可能解决方案也不适合我。我打开这个问题是因为我找不到这个问题的解决方案,也找不到这个问题的类似问题。
我尝试过使用Android Room的自动迁移功能,但它从未正常工作。
目前的情况如下:
我有一个数据库版本1
我想向一个表添加一个新列,这是我想做的唯一修改。此列将保存字符串值,而不保存其他任何内容。
此新列将仅存在于数据库版本2中
我已按照Android留档设置数据库
当我再次运行应用程序时(数据库版本为1的应用程序填充了数据),应用程序崩溃
控制台中的崩溃错误如下:
2021-08-24 21:35:53.941 3081-3141/com.app.test E/AndroidRuntime: FATAL EXCEPTION: pool-18-thread-2
Process: com.app.test, PID: 3081
java.lang.IllegalStateException: Migration didn't properly handle: My(com.com.app.test.data.datbase.entity.MyEntity).
Expected:
TableInfo{name='My', columns=long list of column definitions}
Found:
2021-08-24 21:35:53.942 3081-3141/com.app.test E/AndroidRuntime: TableInfo{name='My', columns=long list of column definitions, plus the new one}
我已使用新版本号 (2) 设置了数据库,并将导出模式设置为 true,并将自动迁移从 1 定义为 2。
我还在应用程序 gradle 配置选项中定义了 schemaLocation。
我找不到任何地方解释为什么这不起作用,这是一个简单的操作,将新列添加到现有表中。
有谁知道为什么这不起作用,我如何让它工作而不必手动编写迁移?
编辑:仔细检查后,数据库迁移中的默认值定义似乎存在一些问题。
预期显示具有非空默认值的列,这是正确的< code > default value = ' ' NOT _ NOTIFIED ' '
找到的显示为空,这是不正确的defaultValue='NULL'
该实体的列定义如下所示
@ColumnInfo(name = "notified", defaultValue = "NOT_NOTIFIED")
public String notified = "NOT_NOTIFIED";
但不知何故,它正在生成默认值为null的定义或迁移,而不是我将其设置为的值。
指定列Info名称和默认值对我来说是诀窍
我最近也遇到了同样的问题,对我来说,问题是我忘记了我之前写的一个版本号相同的手动迁移。
这可能不是您的情况,但为了找出为什么我得到了错误的迁移,我在<code>RoomOpenHelper的<code>onUpgrade导致我忘记了手动迁移。所以尝试一下,它可能会为你提供更多关于正在发生什么的信息。
从实体本身的列定义中删除defaultValue
似乎可以达到目的,但需要为该列设置默认值。这似乎不是正确的行为,而是自动迁移逻辑中的某个错误。
希望有人可能知道发生了什么,并提出一个正确的解决方案,即不删除defaultValue
定义。
The migration CLI automatically migrates your v1 website to a v2 website. info Manual work is still required after using the migration CLI, as we can't automate a full migration The migration CLI migr
当我使用laravel迁移在数据库中创建表时,我遇到了这个问题。我不知道它可能有什么问题,因为我在以前的系统上使用相同的命令。这是我在使用作曲家创建表时得到的错误。 $php artisan迁移迁移表已成功创建。 [Illumb\Database\QueryException]SQLSTATE[42000]:语法错误或访问冲突:1071指定的密钥太长;最大密钥长度为767字节(SQL:alter
我是Android应用程序开发的新手,目前正在开发一个现有的Android应用程序。从Android文档链接https://developer.Android.com/distribute/best-practices/develope/target-sdk中可以看出,应用程序更新必须至少针对Android9.0。 因此,我将targetSDKVersion设置为28,并尝试运行应用程序,但res
如何在Laravel迁移和存在表中添加列自动增量,但不是主键,它的主键是。我使用Laravel 5.7和pgsql。
This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output. Project setup package.json Scoped package
尝试为新实体/表使用自动迁移后,我发现了此错误。 迁移发生时,似乎找不到任何列。我声明我的完整性如下。 我用的是2.4.0-alpha04版本的room for all 任何帮助都非常感谢。