如何从SQLite数据库迁移到房间关于"String"字段?



我正在尝试将数据库从SQLite迁移到Android中的Room。

但我得到了一个错误:

迁移未正确处理:staff_message(db.entity.StafMessage(。预期:TableInfo{message=Column{name='message',type='TEXT',affinity='2',notNull=true,primaryKeyPosition=0,defaultValue='ull'}}找到:TableInfo{message=Column{name='message',type='String',affinity='1',notNull=true,primaryKeyPosition=0,defaultValue='ull'}}

原始表的编写方式如下:

db.execSQL("CREATE TABLE IF NOT EXISTS staff_message( " +
"message String NOT NULL");");

新的表格方案是这样的:

@Entity(tableName = "staff_message")
data class StaffMessage(
@ColumnInfo(name = "message") val message: String
)

唯一的区别是类型。

字符串与TEXT

如何将此表迁移到文件室?

SQLite中没有像String那样的数据类型。你必须使用TEXT

db.execSQL("CREATE TABLE IF NOT EXISTS staff_message( " + "message TEXT NOT NULL");");

我本应该自己迁移的。

static final Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Create the new table
database.execSQL(
"CREATE TABLE users_new (userid TEXT, username TEXT, last_update INTEGER, PRIMARY KEY(userid))");
// Copy the data
database.execSQL(
"INSERT INTO users_new (userid, username, last_update) SELECT userid, username, last_update FROM users");
// Remove the old table
database.execSQL("DROP TABLE users");
// Change the table name to the correct one
database.execSQL("ALTER TABLE users_new RENAME TO users");
}
};

感谢@Raghunadan

最新更新