2012-04-17 41 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

相关问题