【问题标题】:How to store object in sqlite database?如何将对象存储在sqlite数据库中?
【发布时间】:2010-11-17 14:37:11
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    编辑: 阅读 this article 以了解 Java 中的序列化。它以比我仅仅提供一些代码 sn-ps 更好的方式迎合这个主题。

    【讨论】:

    • 你能不能给我一些代码sn-p来做对象的序列化。
    • 我编辑了答案并给出了一篇文章的链接,该文章教你如何进行对象序列化。
    • 链接指向没有序列化信息的 Oracle Java 起始页
    • 链接失效。再详细一点就更好了!
    • 我的印象是,SQLite 实际上是为了在数据库中快速存储对象。我已经在其他应用程序中使用它来达到这个目的。真的是这样吗,我们不能像在非 Android 应用程序中那样使用 SQLite?如果无论如何你都必须使用 SQL 语句,为什么还要在 Andorid 上使用 SQLite?我不明白。那他们为什么要包含 SQLite 呢?
    【解决方案2】:

    与其将它们存储在 SQLite 中,为什么不将它们存储在专门用于存储对象的 db4o 中。一个简单的tutorial,用于使用 db4o 对对象进行排序。

    【讨论】:

    • DB4O 原则上很棒。它非常易于使用。但不幸的是,它有很多错误,开发/维护似乎已经完全停止。非常悲惨的情况。
    【解决方案3】:

    使用此代码将您的对象转换为字节数组并将其作为“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;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2013-02-07
      • 2010-11-18
      • 2011-02-25
      • 1970-01-01
      • 2017-04-03
      • 2011-10-10
      • 1970-01-01
      • 2022-08-16
      相关资源
      最近更新 更多