在SQLite中存储对象。可能吗?

时间:2012-02-04 01:10:28

标签: android sqlite ios4 serialization windows-phone

我有一个非常复杂的问题,但如果我能做到这一点,那么我基本上会在打击中解决它。 基本上,我正在创建一个应用程序,最初将在iOS和Android中运行,后来可能在Blackberry和Windows Phone中运行。问题是,我将使用Dropbox保持所有这些设备同步。我需要持久存储的数据需要存储在SQLite数据库中(理想情况下,因为我不能在所有设备中使用Core Data,并且XML很难在所有平台中使用)。我将创建一个自定义对象(在C ++中,或者一个结构,或者我需要创建的任何东西,只要我可以在所有平台上使用它),并且我希望能够将原始C ++对象存储在数据库中以后在Android中读取它的数据(以及稍后的Blackberry和WP)。

基本上,我的问题是,我可以将原始C ++对象存储在SQLite数据库中吗?因此能够在Android和Windows Phone上阅读它们吗?这听起来像一个愚蠢的问题,因为Android编程是用Java完成的,而WP是用C#完成的,这就是让我怀疑是否可以从数据库中读取我的C ++对象几乎没有问题。

2 个答案:

答案 0 :(得分:1)

我的猜测是,它可能类似于转储二进制数据-an struct for ie-并且答案是肯定的(blob数据类型)。

无论如何,如果我这样做,我会将编码的json存储在文本数据库字段中,以简化和移植。请记住,这个选择取决于许多事实,例如访问数据库以检索/保存这些对象的频率,或者对象的大小等等。

希望这有帮助

答案 1 :(得分:1)

这听起来几乎就像这里有两个问题,我可以回答第一个问题,但对第二个问题不太确定。您的第一个问题,是否可以将已编译的C ++对象存储到SQlite中,答案是肯定的。 SQLite有一个BLOB数据类型,你可以在其中存储二进制对象,它不会尝试对它们进行任何验证,它只会存储并返回它们,但它会得到它们(根本没有验证)。这与您编程的语言完全无关,因为Java和C#不需要知道或关心这些对象中的内容。

至于我解释你的第二个问题是什么,我可以执行这些二元对象,我倾向于拒绝。我不认为有任何机制,至少在Android中,一旦你从SQLite中取出它就会执行这些二进制对象。 NDK允许您编译和构建本机代码,但我不知道动态加载本机对象的任何方法。特别是因为你必须为所有你想要的目标编译它

希望它有所帮助, 大卫