我在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中以便在后面读取。 我不知道我早些时候没有意识到这一点,但......
答案 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
来存储日期/时间,那么建议您切换到使用其他类型(例如Date
或DateTime
)。您还可以编写自定义容器。请参阅:Map PostgreSql money data type to ORMLite。