我正在尝试将一个对象(序列化的)存储在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)不能工作。
老实说,我对此已经不在行了。你们如何再次序列化、存储、检索和反序列化为对象?
发布于 2013-10-22 08:11:17
正如评论所说,这几乎总是不如对二进制数据使用平面文件。
如果需要将文件链接到表中的每一行,最好的方法是将URI存储为字符串。
此问题可能有助于让URI保存并从URI Can I get Uri of image file from its name?中查找文件
发布于 2013-10-22 09:38:37
使用Ormlite框架,它提供了一些简单、轻量级的功能来将Java对象持久化到SQL数据库中
发布于 2013-10-22 09:44:01
greenDAO是一个用于Android/SQLite的简单、轻量级的对象关系映射库。它很容易设置,而且可能更符合您要做的事情,只要您的源数据被结构化到映射到数据库表的类中,并且具有映射到数据库字段的成员数据。它还可以处理一对一和一对多映射。
https://stackoverflow.com/questions/19506725
复制相似问题