7月 292020
一、首先,第一点,为什么不是int型,而是long型
没在代码中看出原因,在greenDao的源代码中只是硬性的规定必须使用Long/long型,估计是为了确保自增值的范围足够大?(应该不是)
做此限制的代码在文件DaoGenerator/src/org/greenrobot/greendao/generator/Property.java中
1 2 3 4 5 6 7 8 |
public PropertyBuilder autoincrement() { if (!property.primaryKey || property.propertyType != PropertyType.Long) { throw new RuntimeException( "AUTOINCREMENT is only available to primary key properties of type long/Long"); } property.pkAutoincrement = true; return this; } |
在sqlite库的源码中,绑定字段的地方也没有int型相关的参数,只有bindLong和bindDouble、bindString等,和这个有关?
sqlite库源码:frameworks\base\core\java\android\database\sqlite\SQLiteProgram.java
二、为什么是Long而不是long?
奇怪的是,官方代码中的意思是Long/long都可以,但long是不行的,在插入2条记录的时候就会报ndroid.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: notes.localid错误。
这个涉及使用sql语句向数据库的自增字段插入数据的问题,sql语句如下:
insert into table(id, name) values(NULL, ‘ldr’);
在greenDao中如果成员是long型,则未赋值时返回的是0,如果是Long型,则返回的是null,所以是这个原因?
这个涉及的文件是bean类生成的相应的Dao类,比如”NoteBeanDao.java”
Sorry, the comment form is closed at this time.