Java - 将字节数组存储为DB中的String,并使用String值创建字节数组

San*_*go 2 java mysql bytearray

我有一个字节数组,其值[B@6c89db9a已经将此值存储在MySQL数据库中作为字符串表示 -mybyteArray.toString()

我想从数据库中检索保存的值,并使用原始字节数组的字符串值创建一个新的字节数组.

我已经尝试了Java Byte Array到String By By By Array的示例

字节到字符串,反之亦然

但是我没有得到原始的字节数组值.它产生了不同的价值.任何人都可以建议吗?

Bri*_*ach 8

我有一个带有值的字节数组[B @ 6c89db9a我存储了这个值...

这不是一个价值.它是一个完全无用的(Java之外)哈希码.toString()数组的方法不会打印数组的内容.数组不会覆盖toString(),因此Object.toString()被调用.

如果你想在MySQL中存储一个任意字节的数组,你会想要使用一种BLOB类型(或者可能VARBINARY?它已经有一段时间了,因为我使用了MySQL,但它从快速谷歌出现它们在现代版本中基本相同)在你的表中,并存储字节:

create table example(some_bytes BLOB);

您准备好的陈述如下:

String query = "INSERT INTO example (some_bytes) VALUES (?)";
PreparedStatement pstmt = conn.prepareStatement(query);
Run Code Online (Sandbox Code Playgroud)

你可以通过以下方式插入这些字节:

pstmt.setBytes(1, myByteArray);
pstmt.execute();
Run Code Online (Sandbox Code Playgroud)

编辑以添加注释:数组中有一些字节.如果这些字节表示字符串并且您知道字符集是什么,则String使用String带有字符集的构造函数将它们转换为a :

String myString = new String(bytes, knownCharset); 
Run Code Online (Sandbox Code Playgroud)

例如,如果它们代表UTF-8字符串,您将使用:

String myString = new String(byteArray, Charset.forName("UTF-8"));
Run Code Online (Sandbox Code Playgroud)