我有一个使用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参数。但是,当我添加它时,错误并没有得到修复,应用程序也会引发此异常:(。该项目已经在Market上,因此我无法将dataType更改为其他类型(例如Date),也可以删除此字段。

在较新的ORMLite上,我应该为Timestamp使用什么?还是ORMLite错误?

更新:
通过将“时间戳记”类型更改为“可序列化”类型进行了修复。现在代码看起来像这样:

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

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

最佳答案

对不起,这个@ 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字段中。让我知道它是否有效。

08-18 17:14
查看更多