安卓&x2B;奥姆莱特&x2B;java.sql.Timestamp
我有一个使用ORMLite的Android项目。所有这些都可以正常工作,但对于数据库中的某些字段,它使用安卓&x2B;奥姆莱特&x2B;java.sql.Timestamp,java,android,sqlite,ormlite,Java,Android,Sqlite,Ormlite,我有一个使用ORMLite的Android项目。所有这些都可以正常工作,但对于数据库中的某些字段,它使用java.sql.Timestamp作为字段类型。它在我以前使用过的ORMLite 4.10上运行良好。但是现在我需要更新ORMLite,有一个问题。。 当我将ORMLite更新为新版本并运行它时,应用程序引发异常: W/System.err( 615): java.sql.SQLException: ORMLite can't store unknown class class j
java.sql.Timestamp
作为字段类型。它在我以前使用过的ORMLite 4.10上运行良好。但是现在我需要更新ORMLite,有一个问题。。
当我将ORMLite更新为新版本并运行它时,应用程序引发异常:
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字段没有数据类型参数。但当我添加它时,错误并没有被修复,应用程序也抛出了这个异常:(.该项目已经上市,所以我不能将数据类型更改为其他类型(如Date),也可以删除此字段
我应该在较新的ORMLite上使用什么作为时间戳?或者它是ORMLite bug
更新:
通过将时间戳类型更改为可序列化类型修复了此问题。现在代码如下所示:
@DatabaseField(dataType = DataType.SERIALIZABLE)
public Serializable createDate;
public Timestamp getCreateDate()
{
return (Timestamp)createDate;
}
对此@st1ing感到抱歉。这当然可能是中的错误,但我怀疑这可能是不兼容的。在版本4.14中,我们必须更改
可序列化
字段的处理方式。这些字段是联机的。引用:
此外,序列化类型现在还必须指定其数据类型值。您应该使用dataType.SERIALIZABLE
继续在数据库中存储序列化对象。这将允许我们在将来添加对其他序列化类型的直接支持,而不会破坏向后兼容性
如果数据库中已经存储了Serializable
数据(byte[]
或其他对象),则需要在字段中添加以下内容:
实际上,异常是试图给您一个关于如何解决问题的提示:
Serializable fields must specify dataType=DataType.SERIALIZABLE
因此,请尝试将其添加到您的
Timestamp
字段中。让我知道它是否有效。我尝试添加数据类型,但无效:(我添加了@DatabaseField(dataType=dataType.SERIALIZABLE)到字段,但它仍然从我的原始消息中抛出SQLexception。我也尝试使用其他数据类型,但没有任何帮助…对于后代,您不应该这样做Serializable
hack。您应该能够在那里拥有实现Serializable
的任何类型。
Serializable fields must specify dataType=DataType.SERIALIZABLE