2013-09-16 181 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;