3

我在使用 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

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

提前谢谢,奥吉

解决方案:

- 数据需要像这样被序列化并插入到数据库中,以便在后面读取。我不知道我怎么没有早点意识到这一点,但是......

4

1 回答 1

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 不能从 a 映射Calendar到 a 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)。你也可以编写一个自定义持久化器。请参阅:将 PostgreSql 货币数据类型映射到 ORMLite

于 2013-07-15T16:53:43.993 回答