我在使用 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
有人知道这两种情况的解决方案吗?
提前致谢,奥吉
解决方案:
-数据需要被序列化并像那样插入到数据库中以便在后面读取。 我不知道我怎么没有早点意识到这一点,但是......
最佳答案
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
字段。如果没有完全异常,则很难知道发生了什么。
Data needs to be serialized and inserted like that into db in order to be read afterwords.
这是正确的,听起来您有自己的解决方案,但为了后代,您还可以做一些其他事情。
如果您只是使用 Calendar
来存储日期/时间,然后切换到使用其他类型(如 Date
或 DateTime
)会被推荐。您还可以编写自定义持久性。请参阅:Map PostgreSql money data type to ORMLite .
关于android - OrmLite、日历和时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17396618/