是的,我知道这是不好的做法,我应该规范我的表格。抛开它,是否可以序列化String []数组并将其存储在数据库中?
我来自PHP的宽容和宽容的世界,其中调用serialize()函数并将数组转换为字符串。
是否有相当于在Java中做这样的异端? 除了规范化之外,还有更优雅的方法在数据库中存储String Arrays吗?
如果适用,我使用jdbc驱动程序进行MySQL连接。
答案 0 :(得分:4)
是。您可以序列化任何Java对象并将序列化数据存储到MySQL中。
如果使用常规序列化(ObjectOutputStream),则输出始终为二进制。偶数String被序列化为二进制数据。因此,您必须对流进行Base64编码或使用像BLOB这样的二进制列。
这与PHP不同,后者的serialize()将所有内容都转换为文本。
您也可以在Java(XMLEncoder)中使用XML序列化,但它非常详细。
答案 1 :(得分:4)
如果您正在考虑原始数组,那么您仍然使用Java编写PHP。
Java是一种面向对象的语言。一系列字符串真的不是一个抽象。
在这里你会得到一个非常好的建议告诉你,可以将这些字符串数组序列化为一个你可以随时存储在MySQL中的BLOB,你可以告诉自己宽大是一种美德。
但是我会提醒你,你因为没有考虑对象而失去了一些东西。它们实际上是关于抽象和封装以及处理比裸机,字符串和数组更高级别的事物。
尝试设计一个可能封装数组的对象或者比Strings更多的子对象的更复杂的数据结构,这是一个很好的练习。父母与孩子之间存在1:m的关系,可以更好地反映您真正想要解决的问题。这将是一个比你在这里提出的设计更加面向对象的设计。
答案 2 :(得分:2)
有各种好的序列化/反序列化库可以自动将JavaBean对象转换为XML和JSON字符串。我有一个很好的经历是XStream。
Java对序列化的内置支持可以做同样的事情,您可以编写自定义序列化/反序列化方法供Java调用。
您也可以滚动自己的序列化方法,例如转换为逗号分隔值(CSV)格式。
我首先选择像XStream这样的库,假设有一个非常令人信服的理由不对数据进行规范化。
答案 3 :(得分:0)
您不想序列化数组。我不确定你为什么要用PHP序列化它,因为implode()和explode()会更合适。你真的应该规范化你的数据,但除此之外,你可以非常轻松地谷歌一个解决方案,将数组转换为字符串。
答案 4 :(得分:0)
如果你真的不想将这个值规范化为一个单独的表,其中每个字符串都在它自己的行中,那么只需将你的数组转换为逗号分隔值列表(可能以某种方式转义逗号)。也许引用每个字符串以便“str1”,“str2”。
Google for CSV RFC规范如何正确转义。
答案 5 :(得分:0)
但肯定更合乎逻辑的做法是将每个字符串保存为具有合适标识符的自己的记录。这可能比编译更少编码 - 通过数组元素的简单循环 - 并且会导致数据库设计干净,而不是一些糟糕的混乱。