2013-07-01 43 views
3

我遇到了一些Orviite映射与android中的java字段的问题。OrmLite,日历和时间戳

1)我在Java类日历类型,并定义为时间戳,当我运行的方法SQLlite同场findAll()我得到如下因素的异常:如果我使用setDataType(DataType.SERIALIZABLE);我得到

ORMLite can't store unknown class class java.util.Calendar for field 
    'Start'. Serializable fields must specify dataType=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 [email protected], 
    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 

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

Thanx提前,Oggie

解决方案:

-Data需要为了进行序列化,并插入像到分贝被后记读取。 我不知道我怎么没意识到这个较早,但....

+0

这是一个类似的问题。 http://stackoverflow.com/questions/7872880/orm-lite-throws-error-when-creating-tables-containing-multi-level-foreign-key – DevZer0

+0

我没有问题的外键,也没有与自定义类... – User1980

回答

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 [email protected], 
    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来存储日期/时间,那么建议您切换到使用其他类型(如DateDateTime)。你也可以写一个自定义的persister。请参阅:Map PostgreSql money data type to ORMLite

+0

Timestamp问题的完整例外堆栈http://pastebin.com/T1dSe5FT – apito