greendao数据库升级not null 异常

问题来源:geeendao数据库升级 版本3.2.2
解决办法:将添加字段的类型由基本类型改为包装类型即可
来由:原来的表对象添加了一个字段 age2,如下:

@Entity
public class User {
    @Id
    private Long id;
    private Integer age;
    private int age2;
    private String name;

数据库升级后会报not null 异常,查看了对应生成的UserDao#createTable,建表语句中确实存在一个

**请注意:为了说明问题这里我在这里添加了2个字段,也就是说包装类型不会出现NOT NULL约束,有人可能会说直接手动将基本类型的NOT NULL去掉,这个是不可行的,这个文件是greendao差价自动生成的,改过之后,会再次添加 ****

““AGE” INTEGER,” + // 1: age
““AGE2” INTEGER NOT NULL ,”
private Integer age; private int age2;

  public static void createTable(Database db, boolean ifNotExists) {
        String constraint = ifNotExists? "IF NOT EXISTS ": "";
        db.execSQL("CREATE TABLE " + constraint + "\"USER\" (" + //
                "\"_id\" INTEGER PRIMARY KEY ," + // 0: id
                "\"AGE\" INTEGER," + // 1: age
                "\"AGE2\" INTEGER NOT NULL ," + // 2: age2
                "\"NAME\" TEXT," + // 3: name
                "\"TEMP_USAGE_COUNT\" INTEGER NOT NULL );"); // 4: tempUsageCount
    }

原来是添加了一个 long 类型的字段,现在改为添加成Long类型,Dao 中建表语句中 NOT NULL 就没了,就可以了

关于怎么升级,可以看这篇文章:但是最后关于 新的字段NUM为TEXT类型,一切正常!的表述有误,文章的意思是使用string类型代替long等基本类型,这样最后还的类型转换,太麻烦。直接使用包装类型即可。
greendao3.0以上使用步骤(二):数据库到底该怎么升级
https://blog.csdn.net/huangxiaoguo1/article/details/54574713

MigrationHelper.java升级数据库用到的类
https://stackoverflow.com/questions/13373170/greendao-schema-update-and-data-migration/30334668#30334668

我是IT小王,如果喜欢我的文章,可以扫码关注我
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值