【问题标题】:Storing and retrieving objects from SQLite从 SQLite 存储和检索对象
【发布时间】:2013-10-21 23:48:50
【问题描述】:

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

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

【问题讨论】:

  • I'm trying to store an object (serialized) in SQLite 你为什么要这样做?如果您只是要存储序列化的二进制数据,请在平面文件中进行。

标签: java android sqlite intellij-idea


【解决方案1】:

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

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

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

【讨论】:

  • 更好的处理方式,谢谢。我不知道为什么我一开始就打折。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 2010-10-12
      • 2015-11-21
      • 1970-01-01
      • 2017-04-03
      • 2021-12-28
      • 2011-12-17
      • 2011-12-30
      相关资源
      最近更新 更多