自动增量ID插入数据ORMLITE

时间:2013-09-16 13:50:37

标签: android database insert ormlite

我是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。我可以使用自动增量吗?

2 个答案:

答案 0 :(得分:3)

  

这里我不能将acc插入我的数据库,因为acc id为零。我想生成id。我可以使用自动增量吗?

所以引用allowGeneratedIdInsert field in @DatabaseField的javadoc:

  

如果将其设置为true,则插入已设置ID字段的对象将不会使用generated-id覆盖它。当您有一个表格,其中项目有时具有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是其中一个数据库。

答案 1 :(得分:0)

使用Wrapper类而不是int

#Densely Connected Layer
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])