我在存钱
data class Settings(
val foo: Int
)
进入我的房间数据库版本1。
现在我需要将设置扩展到
data class Settings(
val foo: Int,
val bar: ArrayList<Baz>
)
在哪里
enum class Baz {
A, B, C
}
所以我需要迁移到版本2。
我有用于
条形码的类型转换器。我现在正在尝试类似的东西
val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE settings ADD COLUMN bar TEXT")
}
}
但是这给了我一个
IllegalStateExcture:迁移没有正确处理设置...
错误。
我被卡住了。所以请帮忙!我如何让迁移工作??
尝试更改设置表名设置,但只通过设置。。
database.execSQL("ALTER TABLE Settings ADD COLUMN bar TEXT")
后添加...
database = Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.addMigrations(MIGRATION_1_2)
.build();
参考这个...如果只添加新表,则迁移房间数据库
原来是我缺乏SQLite技能造成的。
首先,我需要设置一个默认值,因为我的bar
不允许为null
。其次,ALTER TABLE
是非常有限的,不允许我在一行中设置默认值。
最后我做了
val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("CREATE TABLE settings_new (foo INTEGER NOT NULL, bar TEXT NOT NULL, PRIMARY KEY(foo))")
database.execSQL("INSERT INTO settings_new (foo, bar) SELECT foo, '[]' AS bar FROM settings")
database.execSQL("DROP TABLE settings")
database.execSQL("ALTER TABLE settings_new RENAME TO settings")
}
}
换句话说
settings\u new
)并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。
问题内容: 如果需要在列表中添加枚举属性,如何声明列表?让我们说枚举类是: 我想要做: 需要用什么代替 问题答案: 如果要使用字符串类型,请使用以下命令: 否则,MByD的答案
当我们在Laravel框架中运行migrate:install时,migrations表是在有两列(migration,batch)的数据库中创建的,无论如何都要添加在时间戳处创建的新列。谢谢
获取以下异常: 预期: TableInfo{name='chat_table',Columns={message=column{name='message',type='text',affinity='2',notnull=false,primarykeyposition=0},messageStatus=column{name='message status',type='text',affin
我有一些表,我想在这个表中添加新的列。我想添加默认值为空的字符串列。 我试着这样加上去 或 但我有一个错误
我们的应用程序有DB14版本,并使用android sqllite帮助器。现在我们正在使用房间数据库,并将所有数据库的东西迁移到房间。我们已经定义了从1_2,2_3的所有迁移。到13_14,并给出所有这些int构建 这是正确的做法吗。如果我用DB14版本安装了非房间版本的应用程序,并且我试图用相同的DB14版本更新它到房间版本的应用程序,我会得到错误: IllegalStateException: