【问题标题】:Insert a table of integers - int[] - into SQLite database,将整数表 - int[] - 插入 SQLite 数据库,
【发布时间】:2013-05-14 18:47:09
【问题描述】:

是否可以在 SQLite 表中插入像 int[] numbers 这样的整数表?

如何创建我放置此表的列?

这行代码:

values.put(MySqlHelper.COLUMN_CHILDS, numbers);

返回一个错误,例如:

Change type of `numbers` to `String`

【问题讨论】:

  • 如果 SQLLite 中有一个数组类型并且驱动程序正在向你提供,你可以。否则,你应该自己写/读它,因为你正在以字符串形式写入数据库
  • this 的回答,SQLite 不支持数组。您必须使用解决方法,例如将其存储为文本,或使用外键和另一个表。

标签: java arrays sqlite insert


【解决方案1】:

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

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

(更简单但不理想):正如@CloudyMarble 建议的那样,使用Arrays.toString(numbers)(或StringBuilder,如果由于某种原因不符合您的需要)将数组中的所有数字放入逗号-分隔字符串并将其存储在您的数据库中。然后,您可以将该值从数据库中拉回 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]);

【讨论】:

  • 我不知道第二种解决方案,但我正在考虑创建类似的方法,但是是什么让您认为它不理想?
  • 它并不是真正可扩展的。如果您的项目相当小,它会正常工作。但是所有这些字符串操作都很昂贵,而且它们留下了很大的错误空间,所以如果你必须做很多,那么使用第一个解决方案会更有效。
  • 但是 Arrays.toString() 将 [] 放在字符串周围(作为它们之间的逗号)。您的 split sn-p 不会删除它们。我不认为 ParseInt 可以处理 []?
【解决方案2】:

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

Arrays.toString(numbers);

在读取时使用 split 方法拆分数组并将元素转换为整数,如@drewmore 的回答所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多