什么是将整数数组(java)存储到MySQL数据库的好方法

时间:2016-04-15 14:18:53

标签: java mysql arrays android-studio

我一直在为我的问题寻找各种解决方案,但我找不到针对我的具体案例的明确答案,所以想知道是否有人可以建议我或指出我正确的方向。

在我的Android Studio应用中,我有一个二维的int数组(表示颜色网格)。目前,网格的最大大小为250x250,但我可能会在未来增加。我事先知道了网格的大小。

我想将这个数组存储在MySQL数据库中。我想象的是像逗号分隔的字符串(例如" 1,2,3; 7,8,9"),然后阅读有关序列化的内容,并想知道这是否会更好。然而,我读的越多,我就越认为对我所做的事情有点过分。

我永远不需要从数据库访问单个元素 - 它将始终是整个网格一次加载。

关于什么可能是最有效的方法的任何想法?

2 个答案:

答案 0 :(得分:1)

如果您想全面了解性能和大小,我建议您使用BLOB类型作为数据库条目。然后使用带有getBytes方法的Blob类检索它,将其包装在ByteBuffer中,将其转换为IntBuffer并将其读回int数组:)。

Blob b = (mysql stuff from JDBC);
byte[] bytes = b.getBytes(0, b.length());
ByteBuffer bbuffer = ByteBuffer.wrap(bytes);
IntBuffer ibuffer = ((ByteBuffer) bbuffer.rewind()).asIntBuffer();
int[] intArray = ibuffer.array();

然后访问:

intArray[y*gridWidth + x]

我会发布更多链接,但信誉不足:(无论如何,如果你谷歌一点,这一切都非常简单。

再次,这只是因为如果你想要真正有效率,我相信比我更聪明的人可以发明更疯狂和更快的解决方案。您甚至可以进一步存储短路或字节而不是整数。但要记住过早优化是所有邪恶的根源。你现在最好选择最简单的解决方案,只有当它看起来太慢,需要太多数据等时才能改变它。

编辑:刚看到我没有解释如何实际存储它,它基本上是相同的过程,但倒退。如果你愿意,我可以把它添加到答案中,只需发表评论。

答案 1 :(得分:1)

这取决于您的使用案例。对于可扩展设计,您可以添加新表。这将为将来以可读格式添加许多条目提供自由。这样您就可以从数据类型约束(例如,仅允许整数)中获益,将额外属性(列)添加到您的表中,以后您将需要更少的解析从DB读取时的逻辑。