java - 从 SQLite 存储和检索对象

标签 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) 不起作用。

说实话,我对此一无所知。你们如何序列化、存储、检索和反序列化回对象?

最佳答案

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

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

这个问题可能有助于获取要保存的 URI 以及从 URI Can I get Uri of image file from its name? 查找文件。

关于java - 从 SQLite 存储和检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19506725/

相关文章:

java - Grails在合成方面如何使用GORM(对HasMany或不对)

java - 如何将java文件中的一些内容添加到smali文件中?

java - android布局,有面板吗?

android - 没有 Android Linkedin App 的 Android 中的 Linkedin 集成

ios - Google Analytics SDK 创建 SQLite 错误

javascript - Angular JS 循环 promise

java - 如何从一个restful web服务中获取一些数据,并将其保存到数据库中?

java - Spring Jackson 通过接口(interface)序列化

java - JNI - Android 上的警报对话框

sqlite - ionic 3 : Can't resolve all parameters for SQLiteObject: (? )