当前位置:  开发笔记 > 编程语言 > 正文

如何在Sqlite3中的一列中存储数组?

如何解决《如何在Sqlite3中的一列中存储数组?》经验,为你挑选了2个好方法。

有没有办法在一列表中存储整数数组?我想这样的o/p:

ident | value                                                            | count 
----------------+------------------------------------------------------------------------------------------------------------------------+-------
563 | [0:10]={"(0,0)","(1,100)","(2,200)","(3,300)","(4,400)","(5,500)"} |    6

这个我已经通过postgres得到了解,但我也希望从sqlite获得相同的o/p.这里列值存储一个数组.我通过BLOB尝试了它,但它无法正常工作.有人告诉我关于序列化的方式,但我不知道该怎么做.



1> Gianni..:

SQLite3不直接支持数组.见这里支持的类型.基本上,它只有Ints,Floats和Text.

要完成您的需要,您必须使用自定义编码,或使用FK,即创建另一个表,其中数组中的每个项目都存储为一行.



2> Fornoreason1..:

对不起Necro,我自己遇到了问题并找到了解决方案.

如前所述,SQLite不支持数组,因此您无法存储它们.试试这个,我有同样的问题;

您可以将它们存储为大字符串,并使用字符串函数或正则表达式将它们解析回其类型,而不是单独存储数组元素.一个C#的例子

int[] myArray = new int[] {8,4,345,378,34456,7};

string Arraystring = myArray[0].ToString();

for(int i = 1; i < myArray.Length; i++) { 
Arraystring += "," + myArray[i].ToString();

}

这会将数组转换为单个字符串,现在我们将字符串作为字符串插入表中,当您读取字符串时,使用此代码将数组返回.另一个C#例子

string value; //assign this via Reader
string[] tokens = values.Split(',');

int[] myItems = Array.ConvertAll(tokens, int.Parse);

这只适用于单维数组,在解析字符串时多维可能会变得棘手.


如果你要使用这条路线,为什么不将它存储为json对象,因为它很容易从json到大多数语言来回传递.
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有