我到目前为止发现的
所有@entity批注的类在编译期间进行处理,并且生成了Database的实现类。然后,在访问数据库之前,将调用此生成的类的validateMigration方法。这个validateMigration方法通过原始查询与现有的数据库架构进行验证
PRAGMA table_info mytable name
(请参见android.arch.persistence.room.util.TableInfo.java的L208)
现在的问题
我的sqlite3数据库有一些列类型为BOOLEAN的列。(slqite在内部处理为int)。现在当我创建房间实体时说
public someEntity {
@columnInfo(name="someName")
public Boolean myValue;
}
房间的创建表查询将是
Create Table someEntity ( myValue INTEGER)
凡当我们查询 现有的 数据库与PRAGMA table_info someEntity
我们得到
1|myValue|BOOLEAN|0||0
如上所述,room通过比较字段名称,列类型等来验证(sqlite到room)迁移。由于列类型不匹配(BOOLEAN和INTEGER),因此抛出错误,表明迁移失败。
有人可以建议解决方法吗?我们可以腾出空间在sqlite中创建BOOLEAN列类型吗?(此外,我们无法更改/更改现有表的列类型。)
使用值和as 定义新属性 newAttribute 的迁移。DEFAULT``NOT NULL
码
database.execSQL("ALTER TABLE tableName ADD COLUMN newAttribute INTEGER DEFAULT 0 NOT NULL")
完整代码
@Database(entities = arrayOf(ModelName::class), version = 2)
@TypeConverters(Converters::class)
abstract class DatabaseName : RoomDatabase() {
abstract fun daoName(): DaoName
companion object {
private var INSTANCE: DatabaseName? = null
fun getAppDatabase(context: Context): DatabaseName {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
DatabaseName::class.java, DATABASE_NAME)
.addMigrations(MIGRATION_1_2)
.build()
}
return INSTANCE as DatabaseName
}
val MIGRATION_1_2: Migration = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE tableName ADD COLUMN newAttribute INTEGER DEFAULT 0 NOT NULL")
}
}
}
}
问题内容: 尝试按照Apple文档(和教程化的)创建Launch Helper时,我似乎遇到了麻烦,原因是将Objective- C代码移植到Swift中…在此方面,谁的编译器再也不过分了案件。 该错误似乎始终是: 我尝试过在多个位置进行转换,以防万一我只是在处理一个多余的,古老的原语(由Obj- C或Core Foundation引入)而无济于事。 为了以防万一,我尝试投射响应: 产生错误: …
Dart为布尔数据类型提供内置支持,Dart中的布尔数据类型仅支持两个值 - 和。关键字用于表示Dart中的布尔文字。 在Dart中声明布尔变量的语法,如下所示 - 示例1 执行上面示例代码,得到以下结果 - 示例2 与JavaScript不同,布尔数据类型仅将文字识别为。任何其他值都被视为。考虑以下示例 - 如果在JavaScript中运行,上面的代码段将打印消息 - ,因为如果字符串不为空,结
在构建Room数据库之前,我尝试保留旧的SqliteOpenHelper并使用它从1升级到3。这在第一次运行时有效,但随后的运行会使SqliteOpenHelper崩溃,因为它不能降级数据库(Room成功升级到v4,但open helper只知道v3。使用它来确保升级到v3的数据库会导致它尝试降级)
我在存钱 进入我的房间数据库版本1。 现在我需要将
我有一个包含数据的房间数据库,现在我想再增加一列。 房间版本2.4.0-alpha01及以上应该使自动迁移更容易,所以我这样使用它: 然后在我的模型类中,我添加了新的列名,并生成了它的setters和getters,就像其他的一样。 文件室文档指出,如果文件室由于复杂的模式更改而无法执行迁移,则会抛出编译时错误。然而,在我的例子中,我得到了一个关于预期模式和新模式(我在其中添加了一列)之间差异的运