我是Android新手,而ORMLITE却有问题。
例如,假设我有此表:
@DatabaseTable(tableName = "accounts")
public class Account {
@DatabaseField(id = true)
private int id;
@DatabaseField(canBeNull = false)
private String name;
…
我想在不设置id的情况下将新数据添加到我的表中。
我尝试过这种方式:
@DatabaseTable(tableName = "accounts")
public class Account {
@DatabaseField(generatedId = true,allowGeneratedIdInsert=true)
private int id;
@DatabaseField(canBeNull = false)
private String name;
…
> Account acc = new Account();
>
> acc.setName("Example");
>
> AccountDao.createOrupdate(acc);
在这里,我无法将acc插入到我的数据库中,因为acc id为零。我想生成ID。我可以使用自动增量吗?
在这里我无法将acc插入到我的数据库中,因为acc id为零。我想生成ID。我可以使用自动增量吗?
因此,引用javadocs中的allowGeneratedIdInsert
字段@DatabaseField
:
如果将其设置为true,则插入具有ID字段已设置的对象将不会使用generate-id覆盖它。当您有一个表,其中某些项有时具有ID,有时又需要生成它们时,这很有用。仅当数据库支持此行为且
generatedId()
该字段也为true时,此方法才有效。
所以,如果你已经acc.id
设置为一个非0值,应插入到数据库与从ID acc
。如果要acc
获取自动生成的ID,则应将其设置acc.id
为0。
例如,您可以看一下ORMLite Android测试类。搜索testCreateWithAllowGeneratedIdInsert()
具有以下代码的方法:
AllowGeneratedIdInsert foo = new AllowGeneratedIdInsert();
assertEquals(1, dao.create(foo));
AllowGeneratedIdInsert result = dao.queryForId(foo.id);
assertEquals(foo.id, result.id);
...
AllowGeneratedIdInsert foo3 = new AllowGeneratedIdInsert();
foo3.id = 10002;
assertEquals(1, dao.create(foo3));
result = dao.queryForId(foo3.id);
assertEquals(foo3.id, result.id);
注意:文档提到只有在数据库支持的情况下才有效,但是Sqlite是其中之一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句