我想将一个字符串[] [] - 数组存储在数据库中作为数据类型“blob”。我刚刚发现我必须转换它,否则数据几乎会丢失。 最好的方法是什么?
我想我应该对数组进行序列化和反序列化,不幸的是我在那个领域并不是很有经验。所以任何帮助都会受到赞赏。
PS:我想我应该说我需要在Android上这样做,因此使用SQLite。字符串[] []没有固定数量的行或列。答案 0 :(得分:3)
为什么要一个blob?为什么不是clob?或者更好的是,为什么不是varchar?根据您要对数据执行的操作,您应该将数据存储为varchar列中的xml或json。如有必要,它也可以搜索。
你没有说你的阵列中有什么,但可能另一张桌子符合这个法案,虽然确定这远远超出了这个问题的范围(尽管这会产生一个很好的新问题)。
不,最好将数组序列化为文本并将其存储为原样。
编辑...像JSON-lib这样的库支持多维数组的双向序列化。只需通过JSON-lib运行您的数组以获取JSON字符串,存储该字符串,然后在您希望数组返回时通过JSON-lib运行字符串。
我更喜欢我的文本作为文本存在于数据库中,因此我可以搜索它并使用许多可用的数据库工具之一查看它。我不想运行代码来查看列中的内容,如果我需要在开发期间手动调整值,我希望能够更新值,而不是运行程序来为我做。
答案 1 :(得分:2)
好的,假设没有空值。写出:
text.getBytes("UTF-8")
)你可能只使用DataOutputStream
的{{1}}方法作为最后一部分,但这会使得从非Java平台读取起来稍微困难一些。这取决于您的要求。使用writeUTF
会使一般情况下更容易处理。例如:
DataOutputStream
答案 2 :(得分:2)
我刚刚发现了一个名为this question的JSON库(感谢google gson),而不是XML。
您只需将.jar添加到类路径中,我就会为您提供序列化和反序列化的代码:
import com.google.gson.Gson;
public class JsonTest {
public static void main(String[] args) {
String[][] fruits = { { "Banana", "Apple", "Blueberry" }, { "Cherry" }, { "Lemon", "Mango" } };
Gson gson = new Gson();
// Serialization
String json = gson.toJson(fruits);
// Print: [["Banana","Apple","Blueberry"],["Cherry"],["Lemon","Mango"]]
System.out.println(json);
// Deserialization
String[][] result = gson.fromJson(json, String[][].class);
}
}
我很高兴找到这个库,XML太冗长了。
(抱歉拼写错误,我是法国人。)
答案 3 :(得分:1)
您可以使用xstream库将其存储为xml。
由于xml标签不是很有效,但它运行良好且易于使用:
String[][] strs = {
{ "row1_col1", "row1_col2", "row1_col3" },
{ "row2_col1" },
{ "row3_col1", "row3_col2" }
};
XStream xstream = new XStream();
xstream.alias("saa", String[][].class);
xstream.alias("sa", String[].class);
xstream.alias("s", String.class);
String xml = xstream.toXML(str);
System.out.println(xml);
结果:
<saa>
<sa>
<s>row1_col1</s>
<s>row1_col2</s>
<s>row1_col3</s>
</sa>
<sa>
<s>row2_col1</s>
</sa>
<sa>
<s>row3_col1</s>
<s>row3_col2</s>
</sa>
</saa>
反序列化:
String[][] strs = (String[][])xstream.fromXML(xml);
答案 4 :(得分:-1)
我找到了一个适合我的解决方案。
主要问题是显然BLOB没有在数据库中正确保存。我使用Android便捷方法来更新数据库,现在它比我最初预期的更好。