从SQLite存储和检索对象

时间:2013-10-21 23:48:50

标签: java android sqlite intellij-idea

我正在尝试在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)不起作用。

说实话,我对此毫不在意。你们如何再次序列化,存储,检索和反序列化为对象?

3 个答案:

答案 0 :(得分:2)

如评论所述,这几乎总是不如使用平面文件来存储二进制数据。

如果需要将文件链接到表中的每一行,最好的方法是将URI存储为字符串。

此问题可能有助于获取URI以保存和查找URI Can I get Uri of image file from its name?

中的文件

答案 1 :(得分:2)

使用Ormlite框架,它提供了一些简单,轻量级的功能,用于将Java对象持久化到SQL数据库

答案 2 :(得分:0)

greenDAO是一个简单,轻量级的Android / SQLite对象关系映射库。只要您的源数据结构化为映射到数据库表的类并且具有映射到数据库字段的成员数据,它就很容易设置,并且可能更符合您尝试的操作。它还处理一对一和一对多的映射。