Emre Koç Emre Koç - 24 days ago 13
Android Question

Auto increment ID Insert Data ORMLITE

I'm new to Android and I have problem with ORMLITE.

For example let's say I have this table:

@DatabaseTable(tableName = "accounts")
public class Account {

@DatabaseField(id = true)
private int id;

@DatabaseField(canBeNull = false)
private String name;



and I want to add new data into my table without setting id.

I tried this way:

@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);


Here I can't insert acc into my database because acc id is zero. I want to generate id. Can I use autoincrement?

Answer

Here i can't insert acc into my database because acc id is zero. I want to generate id. Can i use autoincrement ?

So to quote the javadocs for the allowGeneratedIdInsert field in @DatabaseField:

If this is set to true then inserting an object with the ID field already set will not override it with a generated-id. This is useful when you have a table where items sometimes have IDs and sometimes need them generated. This only works if the database supports this behavior and if generatedId() is also true for the field.

So if you have acc.id set to a non-0 value, it should be inserted into the database with the id from acc. If you want acc to get an auto-generated id then you should just set acc.id to be 0.

For an example, you could take a look at the ORMLite Android test class. Search for the testCreateWithAllowGeneratedIdInsert() method which has code like:

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);

NOTE: the docs mention that this only works if the database supports it but Sqlite is one of those databases.