2013-09-16 5 views
0

Я новичок в Android, и у меня проблема с ORMLITE.Auto increment ID Вставить данные ORMLITE

Для примера скажем, у меня есть эта таблица:

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

    @DatabaseField(id = true) 
    private int id; 

    @DatabaseField(canBeNull = false) 
    private String name; 
    … 

и я хочу, чтобы добавить новые данные в моей таблице без установки идентификатора.

Я попробовал этот путь:

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

Здесь я не могу вставить согл в моей базе данных, поскольку согласно идентификатор равен нулю. Я хочу создать идентификатор. Могу ли я использовать автоинкремент?

ответ

2

Здесь я не могу вставить acc в свою базу данных, так как acc id равен нулю. Я хочу создать идентификатор. Могу ли я использовать автоинкремент?

Так процитировать Javadocs для allowGeneratedIdInsert field in @DatabaseField:

Если установлено значение истинно, то вставляя объект с полем ID уже установлен не будет перекрывать ее сгенерированным идентификатором. Это полезно, когда у вас есть таблица, в которой элементы иногда имеют идентификаторы, а иногда и их генерируют. Это работает только в том случае, если база данных поддерживает это поведение, и если generatedId() также относится к полю.

Так что если у вас есть acc.id набор к не-0 значение, она должна быть вставлена ​​в базу данных с идентификатор из acc. Если вы хотите получить acc, чтобы получить автогенерируемый идентификатор, вам необходимо просто установить 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

Использование Wrapper класса вместо Int

@DatabaseField(id = true) 
private Integer id;