如何将对象存储在SQLite数据库中?

36

在Android中,是否可以将用户定义的对象存储到SQLite数据库中?例如:我创建了一个类,想要将该类对象存储到数据库中。这是可能的吗?如果可以,如何进行操作?在Blackberry平台上,我能够直接将对象存储在持久化对象中。在SQLite和Android中是否也可以这样做?

3个回答

24

您需要能够将对象序列化为字节流,然后从字节流中重新创建对象。

然后,只需将该字节流存储在您的数据库中。

编辑: 阅读 这篇文章 以了解Java中的序列化。它比我仅提供一些代码片段更好地涵盖了该主题。


请提供一些代码片段来执行对象序列化。 - Kumar
我编辑了答案,并提供了一篇文章的链接,教你如何进行对象序列化。 - Prashast
3
链接指向 Oracle Java 的起始页面,其中没有关于序列化的信息。 - Budda
5
链接腐败。更详细的说明会更好! - Anirudh Ramanathan
1
我曾经认为,SQLite实际上是用于快速将对象存储在数据库中的。我在其他应用程序中就是为了这个目的使用它的。难道我们不能像在非Android应用程序中那样使用SQLite吗?如果你必须执行SQL语句,为什么还要在Andorid上使用SQLite呢?我不明白。他们为什么要包含SQLite呢? - Zelphir Kaltstahl
该链接似乎已经失效,无法访问。在2023年访问时显示页面未找到。 - BlueSquare23

6

使用这段代码将您的对象转换为字节数组并将其存储在数据库中作为“BLOB”

请注意,这里的“BLOB”是二进制大型对象的缩写。
public byte[] makebyte(Dataobject modeldata) {
            try {

                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(baos);
                oos.writeObject(modeldata);
                byte[] employeeAsBytes = baos.toByteArray();
                ByteArrayInputStream bais = new ByteArrayInputStream(employeeAsBytes);
                return employeeAsBytes;
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }

使用以下代码将您的字节数组再次转换为对象

public Dataobject read(byte[] data) {
    try {


        ByteArrayInputStream baip = new ByteArrayInputStream(data);
        ObjectInputStream ois = new ObjectInputStream(baip);
        Dataobject dataobj = (Dataobject ) ois.readObject();
        return dataobj ;

    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return null;
}

6

为什么不将它们存储在专门设计用于存储对象的db4o中,而不是将它们存储在SQLite中。使用db4o进行物体存储的教程非常简单。


6
DB4O 的原理非常优秀,使用非常简单。但不幸的是,它有许多漏洞,而且开发/维护似乎已经完全停止。非常令人遗憾的情况。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接