2013-09-16 125 views
0

我是新来的Android,我有ORMLITE的问题。自动增量ID插入数据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。我可以使用自动增量吗?

回答

2

这里我不能将acc插入到我的数据库中,因为acc id是零。我想生成ID。我可以使用自动增量吗?如果设置为true,那么将与已经设置不会生成-ID覆盖它的ID字段的对象

所以引用的javadoc为allowGeneratedIdInsert field in @DatabaseField。当您有一个表格,其中的项目有时有ID并且有时需要它们生成时,这非常有用。这只适用于数据库支持此行为并且该字段也适用generatedId()

所以,如果你有acc.id设置为非0值,应该从acc被插入到数据库的ID。如果您想acc获得自动生成的ID,那么您应该将acc.id设置为0.

例如,您可以查看ORMLite Android test class。搜索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是其中一个数据库中这仅适用。

0

使用包装类,而不是INT

@DatabaseField(id = true) 
private Integer id;