相关疑难解决方法(0)

使用现有布尔列类型进行房间迁移

到目前为止我发现了什么

在编译期间处理所有@entity带注释的类,并生成Implementation for Database类.然后在访问db之前,调用此生成的类的validateMigration方法.此validateMigration方法通过原始查询使用现有的db模式进行验证

PRAGMA table_info mytable name

(参见android.arch.persistence.room.util.TableInfo.java的L208)

现在问题

我的sqlite3 db有一些列类型为BOOLEAN的列.(slqite内部处理int).现在,当我创建房间实体说

public someEntity {
     @columnInfo(name="someName")
     public Boolean myValue;
}
Run Code Online (Sandbox Code Playgroud)

房间的创建表查询将是

Create Table someEntity ( myValue INTEGER)

凡当我们查询现有的数据库与PRAGMA table_info someEntity我们得到

1|myValue|BOOLEAN|0||0

如上所述,room通过比较字段名称,列类型等来验证(sqlite到room)迁移.由于列类型不匹配(BOOLEAN和INTEGER),它会抛出错误,表示迁移失败.

任何人都可以建议一个解决方法吗?我们可以在sqlite中创建空间创建BOOLEAN列类型吗?(另外,我们无法更改/更改现有表的列类型.)

PS:我也看到了与VARCHAR类似的问题 - 在Room中使用现有的VARCHAR列

java sqlite android android-room

6
推荐指数
2
解决办法
2462
查看次数

Room Persistence Library:迁移过程中出现奇怪的错误

我因这个错误而挠头。到目前为止我找不到任何答案。我有旧数据库,我正在将其迁移到 Persistence Room 库。但是,每当我进行迁移时,都会出现以下错误,

java.lang.IllegalStateException: Migration didn't properly handle. 
Run Code Online (Sandbox Code Playgroud)

我使用的代码如下:

@Entity(tableName = ROUTE_TABLE)
public class RouteData {

    static final String ROUTE_TABLE = "name";

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private int id;
    @ColumnInfo(name = "col1")
    private String col1;
    //Other columns with exactly same as 'col1' just different names
    //Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)

对于迁移,

Room.databaseBuilder(context.getApplicationContext(), MyData.class, DATABASE_NAME)
            .addMigrations(MIGRATION_LATEST)
            .fallbackToDestructiveMigration() 
            .build();

private static final Migration MIGRATION_LATEST = new Migration(9, 10) {
    @Override
    public void migrate(SupportSQLiteDatabase db) {
        //Log.i("Tag" , "Migration Started");
        //Migration …
Run Code Online (Sandbox Code Playgroud)

android database-migration android-room

5
推荐指数
1
解决办法
2612
查看次数

标签 统计

android ×2

android-room ×2

database-migration ×1

java ×1

sqlite ×1