美文网首页
android Room数据库新增BOOLEAN类型的坑

android Room数据库新增BOOLEAN类型的坑

作者: 尖叫_ | 来源:发表于2020-09-24 17:59 被阅读0次
  • 在migrate()方法中执行SQL语句新增某字段时,该字段不能为BOOLEAN类型的,需要用 INTEGER 替换,如果不指定默认值,则系统默认为1也就是true,但是在写表Model 实体时,时可以定义Boolean类型的变量的,Room会自己转化为INTEGER。

深坑!! 表里是BOOLEAN类型,但是SQL语句需要用INTEGER

  • 新增某字段类型为 String 时,在migrate()方法中执行SQL语句,该字段用 TEXT 类型进行声明
  • 假设新增ctTime 字段的类型是int 或 long,在表UserModel 实体里, , 则在migrate()方法中执行SQL语句的时候ctTime 声明需为 INTEGER 类型,并且要加上 NOT NULL DEFAULT 0 ,如:"ALTER TABLE UserModel ADD COLUMN ctTime INTEGER NOT NULL DEFAULT 0" ,
    如果不加 NOT NULL 则会报这个异常:java.lang.IllegalStateException: Migration didn't properly handle UserModel ,因为Room会默认根据你的数据实体UserModel来创建该字段的notNull=true,所以必须加上。
    如果不加 DEFAULT 0 则会报这个异常:android.database.sqlite.SQLiteException: Cannot add a NOT NULL column with default value NULL (code 1):

相关文章

网友评论

      本文标题:android Room数据库新增BOOLEAN类型的坑

      本文链接:https://www.haomeiwen.com/subject/haltuktx.html