1

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

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

以前は createDate フィールドの dataType パラメータがありませんでした。しかし、追加したとき、エラーは修正されず、アプリもこの例外をスローします:(。プロジェクトはすでに市場に出ているため、dataTypeを他のタイプ(Dateなど)に変更することはできず、このフィールドも削除できます。

新しい ORMLite のタイムスタンプには何を使用すればよいですか? それともORMLiteのバグですか?

更新: Timestamp 型を Serializable 型に変更して修正しました。コードは次のようになります。

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

public Timestamp getCreateDate()
{
    return (Timestamp)createDate;
}
4

1 に答える 1

0

この@st1ingについて申し訳ありません。これは確かにORMLiteのバグである可能性がありますが、むしろ非互換性であると思われます。Serializableバージョン 4.14 では、フィールドの処理 方法を変更する必要がありました。アップグレード ノートはオンラインです。引用するには:

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

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

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

実際、例外は問題を解決する方法についてのヒントを提供しようとしています:

Serializable fields must specify dataType=DataType.SERIALIZABLE

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

于 2012-04-17T17:44:34.307 に答える