2011-10-06 68 views
3

我是新來的android和ormLite,我只是嘗試存儲數據,並使用queryForId再次返回。起初,它工作得很好,但不知何故擺弄了一下......我得到了一個例外,說我的班級沒有ID字段。ORMLite不能做queryForId

這裏是該類

@DatabaseTable(tableName="ForeignData") 
public class ForeignData implements Serializable { 

    private static final long serialVersionUID = 3640428963380696279L; 

    @DatabaseFieldId(generatedId = true) 
    private Integer id; 

    @DatabaseFieldSimple(defaultValue = "") 
    private String name; 

    public ForeignData(){}; 
} 

的代碼,這是我怎麼稱呼它...

ForeignData f = new ForeignData(); 
try { 
    Dao<ForeignData, Integer> fdao = new DatabaseHelper(getApplicationContext()).getForeignDao(); 
    f.setName("test"); 
    fdao.create(f); 
    f = fdao.queryForId(f.getId())==null?f:fdao.queryForId(f.getId()); 
    txt1.setText(f.getName());     
} catch (SQLException e) { 
    txt1.setText(e.getMessage()); 
} 

,並在

f = fdao.queryForId(f.getId())==null?f:fdao.queryForId(f.getId()); 

趕上例外,其收益無法查詢-for-id,因爲ForeignData沒有id列。

,如果我改變ForeignData類標識加入

@DatabaseField(generatedId=true,columnName="id") 
private Integer id; 

的例外,我得到的是 「從數據庫字段queryForOne:SELECT * FROM 'ForeignData' WHERE 'ID'=?」

+0

所有的代碼看起來找到@GAO所以我懷疑你是你的'onUpgrade'方法是正確的。這絕對看起來像架構不匹配。將來,請確保從堆棧跟蹤報告至少有幾行錯誤 - 而不僅僅是消息。 – Gray

+0

謝謝我將來會這麼做,我仍然不習慣看到所有的堆棧跟蹤,所以我經常不會看它們,只是看看我的代碼中有什麼會造成這個bug。 –

回答

-1

嘗試卸載從設備的應用程序,並再次運行它...工程....

我覺得有什麼毛病onUpgrade功能對我databaseHelper,所以這個問題可能沒有更多的相關...

0

另一種可能性(對於有同樣問題的其他用戶)。

OrmLite允許您在「配置文件模式」下運行以提高性能。要檢查您是否使用此模式,請查看OrmLiteSqliteOpenHelper類,並查看您正在調用的超級構造函數的哪個版本。如果你給它一個configFileId,那麼你就處於這種模式。

假設是這種情況,請確保運行OrmLiteConfigUtil類作爲Java應用程序來生成配置文件。每次您對某個模型文件進行ORM相關更改時,都需要執行此操作,因爲它將此文件用作模型的真實來源(它不會在運行時檢查模型文件的註釋)。

2

您可以更改ID在ForeignData類分爲:

@DatabaseField(id = true) 
private Integer id;