2012-04-17 43 views
1

我有一個使用ORMLite的Android項目。所有工作正常,但對於數據庫中的某些字段,它使用java.sql.Timestamp作爲字段類型。它在我之前使用的ORMLite 4.10上運行良好。但現在我需要更新ORMLite,並有一個問題.. 當我更新ORMLite到較新的版本並運行它,應用程序拋出異常:Android + ORMLite + java.sql.Timestamp

W/System.err( 615): java.sql.SQLException: ORMLite can't store unknown class 
    class java.sql.Timestamp for field 'createDate'. 
    Serializable fields must specify dataType=DataType.SERIALIZABLE 

有用於CREATEDATE場任何數據類型參數之前。但是當我添加它時,錯誤並不是固定的,app也會拋出這個異常:(項目已經在Market上,所以我不能將dataType更改爲其他類型(如Date),並且可以刪除該字段。

我應該用什麼來戳在較新的ORMLite或者是ORMLite錯誤

更新:?? 通過改變時間戳類型爲序列型固定它現在的代碼如下所示:

@DatabaseField(dataType = DataType.SERIALIZABLE) 
public Serializable createDate; 

public Timestamp getCreateDate() 
{ 
    return (Timestamp)createDate; 
} 
+0

對於後代,你不應該這樣做'可序列化'破解。你應該可以有任何實現'Serializable'的類型。 – Gray 2012-04-23 15:03:55

回答

0

對不起@ st1ing這當然可以是中的一個bug 10但我懷疑它可能是不相容的。在版本4.14中,我們必須改變如何處理Serializable字段。 Upgrade notes已聯機。引用:

另外,序列化類型現在還必須指定它們的dataType值。您應該使用DataType.SERIALIZABLE繼續將序列化對象存儲在數據庫中。這將允許我們在將來不增加向後兼容性的情況下直接支持其他序列化類型。

如果你已經存儲在數據庫中Serializable數據(byte[]或其他對象),那麼你將需要添加類似下面給您的字段:

@DatabaseField(dataType = DataType.SERIALIZABLE) 
Serializable field; 

其實,異常努力給你一個提示,如何解決你的問題:

Serializable fields must specify dataType=DataType.SERIALIZABLE 

所以嘗試添加到您的Timestamp領域。讓我知道它是否有效。

+0

我試圖添加dataType,但它不工作:(我添加@DatabaseField(dataType = DataType.SERIALIZABLE)字段,但它仍然從我的原始消息拋出SQLexception。我也嘗試使用其他dataTypes,但沒有任何幫助... – st1ng 2012-04-17 19:36:21

+0

請通過http://256.com/gray/email.html向我發送郵件,我們會把它找出來。 – Gray 2012-04-17 19:38:24

相關問題