GreenDao遇到PRIMARY KEY must be unique (code 19)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stimgo/article/details/81625568

错误如图:
这里写图片描述

这里可能有以下几个原因:

  • 1.如果主键标记时没有添加autoincrement , 那么就是传的id重复了, 传的时候获取最新id然后++id即可, 这里不讨论
@Id(autoincrement = true)
  • 2.我明明标了autoincrement , 按理不用传id的, 也确实没传, 还爆not unique的话, 就是踩坑了

GreenDao的主键必须设置成包装类 Long , 大写L

原因就在这里 : 如果主键设置为包装类Long类型, 那么在生成的Dao类中会有一个判断非null才插入。改成Long即可
这里写图片描述

private Long _id;

@Override
protected final void bindValues(SQLiteStatement stmt, IdCache entity) {
    stmt.clearBindings();

    Long _id = entity.get_id();
    if (_id != null) {
        stmt.bindLong(1, _id);
    }
    stmt.bindString(2, entity.getUser());
}

但是如果写的是 long, 就无脑写进去了, 也就是说即使不传值,也会insert _id = 0, 于是报异常;

猜你喜欢

转载自blog.csdn.net/stimgo/article/details/81625568