在SQLite数据库中使用HashMap

3

我想在SQLite数据库中存储一个HashMap。我尝试使用对象数据库,但对于Android开发来说它太笨重了。我应该只是将其序列化然后存储序列化的结果吗?还是必须做其他事情?


2
只有一个地图还是多个地图 - 如果是多个的话,有多少个等等?数据将如何被访问?这可以有很多不同的方式。我使用自定义非常紧凑的二进制序列化(尽管在.NET中):我还有10,000+个地图(每个“项目”有两个地图,每个地图有2-50+个键),其中几乎所有的键都是重复的。这与仅存储一组配置设置的需求完全不同。 - user166390
这只是一个单一的映射,包含三个键值对,其中键是字符串,值是ArrayList。 - providence
1
另一种方法是创建一个表格,其中列是映射中的键。这对于固定对象表示非常有效。如果映射是另一个记录的“部分”,那么序列化可能更合适。如果它只是一个存储,那么使用实体-属性模型可能是适当的(但是,如果适用的话,不要在“宽”表上使用EAV!)。只是不要固守于一种方法 - 选择适合设计的方法。 - user166390
2个回答

4

既然HashMap是键值对,为什么不将所有的键/值添加到JSON对象中,并将该对象存储在SQLite中呢?


我以为如果我这样做,当我检索它时,计算机会将其视为字符串。这不是这样吗? - providence
1
@providence JSON -是-一个字符串序列化(实际上是文本)。各种JSON库允许访问JSON作为“对象图”或将其转换为/从本地对象表示形式。请参阅http://json.org :-) - user166390

1
一个Map是键/值对。如果您有一个表,其中包含与您的Map键匹配的主键列,则可以将每个Map条目添加到数据库中的一行。

是的,这是可能的,但我受到ObjectOutputStream/ObjectInputStream工作过程的启发,认为通过将序列化过程的字节输出存储在数据库中,我可以稍后通过反序列化来重建完全相同的对象。然后我也想,也许我对某些东西的工作方式有误解...听起来可行吗? - providence
1
@providence: 可能性是存在的,但与关系型数据库的本质相悖,就像试图将手机显示屏用作手电筒一样:如果确实有需要,你可以紧急使用它(我实际上曾经这样做过),但有更适合这个任务的工具。 - Jason S

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