2012-04-17 5 views
1

私はORMLiteを使用するAndroidプロジェクトを持っています。すべて正常に動作しますが、データベースの一部のフィールドではフィールドタイプとしてjava.sql.Timestampが使用されます。 ORMLite 4.10についてはこれまでに使用していましたが、うまく機能しました。しかし、今、私はORMLiteを更新し、問題を持っている必要があります。.. 私は新しいバージョンにORMLiteを更新し、それを実行すると、アプリが例外をスロー:CREATEDATEフィールドにはデータ型のパラメータは、以前にはなかったAndroid + ORMLite + java.sql.Timestamp

W/System.err( 615): java.sql.SQLException: ORMLite can't store unknown class 
    class java.sql.Timestamp for field 'createDate'. 
    Serializable fields must specify dataType=DataType.SERIALIZABLE 

。しかし、私がそれを追加したとき、エラーは修正されておらず、アプリケーションもこの例外をスローします:(プロジェクトは既にマーケットにあるので、他のタイプ(Dateなど)にdataTypeを変更することはできず、このフィールドも削除できます。

私は新しいORMLiteにタイムスタンプのために何を使うべきか、それはORMLiteバグです

UPDATE:?。 はSerializableを型にタイムスタンプの種類を変更することで、それを修正今のコードは次のようになります。

@DatabaseField(dataType = DataType.SERIALIZABLE) 
public Serializable createDate; 

public Timestamp getCreateDate() 
{ 
    return (Timestamp)createDate; 
} 
+0

後世のために、そのような 'Serializable'ハックをする必要はありません。そこに 'Serializable'を実装する任意の型を持つことができるはずです。 – Gray

答えて

0

この@ st1ingには申し訳ありません。これは確かにバグかもしれません私はむしろ、それが非互換性であるかもしれないと思う。バージョン4.14では、フィールドがどのように処理されるかを変更する必要がありました。 Upgrade notesはオンラインです。見積もり:

さらに、シリアライズ型でもdataType値を指定する必要があります。シリアライズされたオブジェクトをデータベースに格納し続けるには、DataType.SERIALIZABLEを使用する必要があります。これにより、将来の互換性を損なうことなく、将来他のシリアライズ型の直接サポートを追加することができます。

あなたは既にデータベースに保存されているSerializableデータ(byte[]またはその他のオブジェクト)を持っているなら、あなたは自分のフィールドに次のようなものを追加する必要があります。

@DatabaseField(dataType = DataType.SERIALIZABLE) 
Serializable field; 

実際には、例外がしようとしていますあなたの問題を解決する方法についてのあなたにヒントを与える:

Serializable fields must specify dataType=DataType.SERIALIZABLE 

だからあなたTimestampフィールドにそれを追加してみてください。それが動作するかどうか私に教えてください。

+0

dataTypeを追加しようとしましたが動作しません:(@DatabaseField(dataType = DataType.SERIALIZABLE)をフィールドに追加しましたが、元のメッセージからSQLExceptionをスローします。 ... – st1ng

+0

http://256.com/gray/email.htmlで私にメールを送ってください。 – Gray

関連する問題