Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:序列化字符串[]数组以存储在MySQL数据库中?_Java_Mysql_Arrays_Serialization - Fatal编程技术网

Java:序列化字符串[]数组以存储在MySQL数据库中?

Java:序列化字符串[]数组以存储在MySQL数据库中?,java,mysql,arrays,serialization,Java,Mysql,Arrays,Serialization,是的,我知道这是一种不好的做法,我应该改为规范我的表格。抛开这一点,是否可以序列化String[]数组并将其存储在数据库中 我来自宽容宽容的PHP世界,在那里调用serialize()函数并将数组转换为字符串 在爪哇有没有类似的异端邪说? 除了规范化之外,还有更优雅的方法在数据库中存储字符串数组吗 如果适用,我将使用jdbc驱动程序进行MySQL连接。是。您可以序列化任何Java对象,并将序列化后的数据存储到MySQL中 如果使用常规序列化(ObjectOutputStream),则输出总是二进

是的,我知道这是一种不好的做法,我应该改为规范我的表格。抛开这一点,是否可以序列化String[]数组并将其存储在数据库中

我来自宽容宽容的PHP世界,在那里调用serialize()函数并将数组转换为字符串

在爪哇有没有类似的异端邪说? 除了规范化之外,还有更优雅的方法在数据库中存储字符串数组吗


如果适用,我将使用jdbc驱动程序进行MySQL连接。

是。您可以序列化任何Java对象,并将序列化后的数据存储到MySQL中

如果使用常规序列化(ObjectOutputStream),则输出总是二进制的。偶数字符串被序列化为二进制数据。因此,您必须对流进行Base64编码,或者使用类似BLOB的二进制列

这与PHP不同,PHP的serialize()将所有内容转换为文本


您也可以在Java中使用XML序列化(XMLEncoder),但它非常冗长。

您不想序列化数组。我也不知道为什么要用PHP序列化它,因为内爆()和爆炸()更合适。你真的应该规范化你的数据,但除此之外,你可以很容易地在谷歌上搜索一个将数组转换成字符串的解决方案。

如果你考虑的是原始数组,你仍然在用Java编写PHP

Java是一种面向对象的语言。字符串数组实际上并不是一种抽象

在这里,您将得到非常好的建议,告诉您可以将字符串数组序列化为一个BLOB,您可以轻松地将其存储在MySQL中,并且您可以告诉自己宽容是一种美德

但我要提醒你,如果你不从物体的角度思考,你会失去一些东西。它们实际上是关于抽象和封装,并在比裸机int、字符串和数组更高的级别上处理事物


这是一个很好的练习,可以尝试设计一个对象来封装一个数组或另一个比字符串更复杂的子对象数据结构。父母和孩子之间会有一种1:m的关系,这会更好地反映出你真正想要解决的问题。这将是一个远比您在这里提出的更面向对象的设计。

如果您真的不想将这些值规范化为一个单独的表,其中每个字符串都位于自己的行中,那么只需将数组转换为逗号分隔的值列表(可能以某种方式转义逗号)。也许引用每个字符串,这样“str1”,“str2”


Google for CSV RFC for spec说明如何正确转义。

但更合乎逻辑的做法肯定是使用合适的标识符将每个字符串保存为自己的记录。这可能比序列化(通过数组元素的一个简单循环)更少编码,并且会导致一个干净的数据库设计,而不是一些乱七八糟的东西。

有各种好的序列化/反序列化库,可以自动将JavaBean对象转换为XML和JSON字符串或从XML和JSON字符串转换为Java Bean对象。我有一个很好的经验是

Java对序列化的内置支持也可以做同样的事情,您可以编写自定义序列化/反序列化方法供Java调用

您也可以使用自己的序列化方法,例如转换为逗号分隔值(CSV)格式


我会首先选择像XStream这样的库,假设有一个非常有说服力的理由不规范数据。

Jim:谢谢你对“it's”的更正!我经常从其他犯这种语法错误的人那里得到笑声——比如附近的一家杂货店,橱窗上有一个大牌子,“我们想成为你的食品店!”——我笑了又笑。然后我自己做了!我必须羞愧地掩面-(杰伊:我和你在一起,喜欢嘲笑这些错误,但发现我也犯了错误!:-(