繁体   English   中英

Java:Serializing String [] Array存储在MySQL数据库中?

[英]Java: Serializing String[] Array to store in a MySQL Database?

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

我来自PHP的宽容和宽容的世界,其中调用serialize()函数并将数组转换为字符串。

是否有相当于在Java中做这样的异端? 除了规范化之外,还有更优雅的方法在数据库中存储String Arrays吗?

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

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

如果使用常规序列化(ObjectOutputStream),则输出始终为二进制。 偶数String被序列化为二进制数据。 因此,您必须对流进行Base64编码或使用像BLOB这样的二进制列。

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

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

如果您正在考虑原始数组,那么您仍然在用Java编写PHP。

Java是一种面向对象的语言。 一个字符串数组真的不是一个抽象。

你会得到一个非常好的建议告诉你,可以将这些字符串数组序列化为一个你可以随时存储在MySQL中的BLOB,你可以告诉自己宽大是一种美德。

但是我会提醒你,你不会因为没有考虑对象而失去一些东西。 它们实际上是关于抽象和封装以及处理比裸机,字符串和数组更高级别的事物。

尝试设计一个可能封装数组的对象或者比Strings更多的子对象的更复杂的数据结构是一个很好的练习。 父母与孩子之间存在1:m的关系,可以更好地反映您真正想要解决的问题。 这将是一个比你在这里提出的设计更加面向对象的设计。

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

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

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

我首先选择像XStream这样的库,假设有一个非常令人信服的理由不对数据进行规范化。

您不希望序列化数组。 我不确定你为什么要用PHP序列化它,因为implode()和explode()会更合适。 你真的应该规范化你的数据,但除此之外,你可以非常轻松地谷歌解决方案将数组转换为字符串。

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

Google for CSV RFC规范如何正确转义。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM