2

オブジェクトを(シリアル化された)SQLiteに保存しようとしています。次に、オブジェクトを取得して逆シリアル化し、元のオブジェクトに戻します...

これまでのところ、オブジェクトを格納するためのコードを書くことができました (と思います)。

public void addLookup( LookupData lookupData ){
    SQLiteDatabase db = this.getWritableDatabase();


    ContentValues values = new ContentValues();
    values.put(KEY_PERSON, lookupData.getPersonName());
    values.put(KEY_PERSONOBJECT, Serializer.serializeObject(lookupData));
    values.put(KEY_DATETIME, lookupData.getDatetime());

    db.insert(TABLE_LOOKUPS, null, values);
    db.close();
}

しかし、私はデータを再び取り出すのに苦労しています:

public PersonData getLookup( Integer id ){
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABLE_LOOKUPS, new String[] { KEY_ID, KEY_PERSON, KEY_PERSONOBJECT, KEY_DATETIME }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null );
    if( cursor != null )
        cursor.moveToFirst();
    LookupData lookupData = Serializer.deserializeObject(cursor.getBlob(2));
}

deserializeObject は byte[] を想定しているため、IntelliJ は、cursor.getString(2) または cursor.getBlob(2) が機能しないと不平を言っています。

正直なところ、私はこれで私の深さから外れています。どうやってシリアル化、保存、取得、逆シリアル化してオブジェクトに戻しますか?

4

3 に答える 3

2

Ormliteフレームワークを使用すると、Java オブジェクトを SQL データベースに永続化するためのシンプルで軽量な機能が提供されます。

于 2013-10-22T01:38:36.943 に答える
2

コメントされているように、これはほとんどの場合、バイナリ データにフラット ファイルを使用するよりも劣っています。

テーブルの各行にファイルをリンクする必要がある場合、最善の方法は URI を文字列として保存することです。

この質問は、保存する URI を取得し、URI からファイルを見つけるのに役立ちます。その名前から画像ファイルの Uri を取得できますか?

于 2013-10-22T00:11:17.210 に答える
0

greenDAOは、Android/SQLite 用の簡単で軽量なオブジェクト リレーショナル マッピング ライブラリです。ソース データが、データベース テーブルにマップされるクラスに構造化され、データベース フィールドにマップされるメンバー データを持っている限り、セットアップは簡単で、おそらく目的に沿ったものになるでしょう。1 対 1 および 1 対多のマッピングも処理します。

于 2013-10-22T01:44:00.583 に答える