OrmLite,日历和时间戳

时间:2013-07-01 02:13:42

标签: android calendar timestamp ormlite

我在android中使用java字段进行一些OrmLite映射时出现问题。

1)我在java类中有Calendar类型,在SQLlite中有相同的字段定义为TimeStamp,当我运行方法findAll()时,我得到了以下异常:

ORMLite can't store unknown class class java.util.Calendar for field
     'Start'. Serializable fields must specify dataType=DataType.SERIALIZABLE

如果我使用setDataType(DataType.SERIALIZABLE);我收到此错误:

java.sql.SQLException: Could not read serialized object from byte array: [50, 48,

此外,我尝试使用DataType.TIME_STAMP,但后来我收到了此错误:

Field class java.util.Calendar for field FieldType:name=Start,class=PeriodTest is
     not valid for type com.j256.ormlite.field.types.TimeStampType@416f9ea0,
     maybe should be class java.sql.Timestamp

2)我对TimeStamp(DataType.TIME_STAMP)java类有同样的问题。例如:

E/AndroidRuntime(14662): java.lang.Error: java.sql.SQLException:
     Could not assign object 'Mon Jul 01 09:46:12 CEST 2013' to field
     FieldType:name=timestamp

有没有人知道这两种情况的解决方案?

提前完成,Oggie

解决方案:

-Data需要序列化并像这样插入到db中以便在后面读取。 我不知道我早些时候没有意识到这一点,但......

1 个答案:

答案 0 :(得分:3)

ORMLite can't store unknown class class java.util.Calendar for field
  'Start'. Serializable fields must specify dataType=DataType.SERIALIZABLE

这是试图告诉您ORMLite本身并不知道Calendar类型。它不知道如何在SQL中表示它。

java.sql.SQLException: Could not read serialized object from byte array: [50, 48,

呀。如果您已经在数据库中存储了数据,则无法存储可序列化字段。

Field class java.util.Calendar for field FieldType:name=Start,class=PeriodTest is
   not valid for type com.j256.ormlite.field.types.TimeStampType@416f9ea0,
   maybe should be class java.sql.Timestamp

这表示ORMLite无法从Calendar映射到Timestamp

E/AndroidRuntime(14662): java.lang.Error: java.sql.SQLException:
   Could not assign object 'Mon Jul 01 09:46:12 CEST 2013' to field
   FieldType:name=timestamp

这听起来像数据库中有一个字符串,但是Timestamp字段。但没有完全例外,很难知道发生了什么。

  

数据需要被序列化并像这样插入到db中以便在后面读取。

这是正确的,听起来你有自己的解决方案但是对于子孙后代,你还可以做其他一些事情。

如果您只是使用Calendar来存储日期/时间,那么建议您切换到使用其他类型(例如DateDateTime)。您还可以编写自定义容器。请参阅:Map PostgreSql money data type to ORMLite