Android + ORMLite + java.sql.Timestamp

时间:2012-04-17 07:07:16

标签: 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 java.sql.Timestamp for field 'createDate'.
    Serializable fields must specify dataType=DataType.SERIALIZABLE

之前没有createDate字段的dataType参数。但是当我添加它时,错误没有修复,app也抛出了这个异常:(。项目已经在Market上,因此我无法将dataType更改为其他类型(例如Date),并且也可以删除此字段。 / p>

对于较新的ORMLite,我应该在Timestamp上使用什么?或者是ORMLite bug?

更新 通过将Timestamp类型更改为Serializable类型来修复它。现在代码如下所示:

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

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

1 个答案:

答案 0 :(得分:0)

对此感到抱歉@ st1ing。这当然可能是ORMLite中的错误,但我怀疑它可能是不兼容的。在4.14版中,我们必须更改Serializable字段的处理方式。 Upgrade notes在线。引用:

  

此外,序列化类型现在还必须指定其dataType值。您应该使用DataType.SERIALIZABLE继续在数据库中存储序列化对象。这将允许我们在将来添加对其他序列化类型的直接支持,而不会破坏向后兼容性。

     

如果您已将Serializable数据(byte[]或其他对象)存储在数据库中,则需要在字段中添加以下内容:

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

实际上,例外是试图给你一个如何解决问题的提示:

Serializable fields must specify dataType=DataType.SERIALIZABLE

请尝试将其添加到Timestamp字段。如果有效,请告诉我。