将整数数组 - int[] - 插入到 SQLite 数据库中的表格中。

11

能否将如int[] numbers这样的整数表插入到SQLite表中?

如何创建放置此表的列?

此行代码:

values.put(MySqlHelper.COLUMN_CHILDS, numbers);

返回一个类似于以下的错误:

Change type of `numbers` to `String`

如果SQLLite中提供了数组类型并且驱动程序将其提供给您,则可以使用它。否则,您需要自己编写/读取字符串以将其写入数据库。 - Neron
1
请参考这个答案,SQLite不支持数组。您需要使用一些解决方法,例如将其存储为文本,或者使用外键和另一个表。 - Dmitry Kuskov
2个回答

17

SQLite中没有数组数据类型。你有两个选择:

创建两个不同的表,一个“主”表和一个“数字”表,其中数字通过外键引用“主”表上的记录(行)。

(更简单但不是最理想的方案): 如@CloudyMarble建议的那样,使用Arrays.toString(numbers)将数组中的所有数字放入以逗号分隔的字符串中,并将其存储在数据库中。然后,您可以从数据库中将该值取回到Java数组中,如下所示:

 String[] s = stringFromDB.split(",");
 int[] numbers = new int[s.length];
 for (int curr = 0; curr < s.length; curr++)
     numbers[curr] = Integer.parseInt(s[curr]);

我不知道第二种解决方案,但我正在考虑创建类似的方法,但是您认为这不是理想的原因是什么? - Hossam Oukli
这种做法不太具有可伸缩性。如果你的项目相对较小,那么使用这种方法就还可以。但所有这些字符串操作都非常昂贵并且会留下巨大的错误空间,因此如果你需要进行大量这样的操作,使用第一个解决方案更加高效。 - drew moore
6
Arrays.toString()方法会在字符串周围添加方括号,并将逗号放置在它们之间。您的split代码片段没有删除它们。我不认为ParseInt能够处理方括号? - Tom

4

将您的数字数组作为字符串插入:

Arrays.toString(numbers);

根据@drewmore的回答,可以使用split方法将数组分割并将元素转换为整数。


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