从MySQL字节数组中获取插入的文件到实际的文件内容

时间:2012-01-03 07:23:30

标签: mysql sql jdbc prepared-statement

我已将文件作为字节数组插入MySQL数据库:

preparedStatment.setBytes(10, inpStream.toString().getBytes());

我已经将数据库中的文件作为字节数组获取,但我仍然坚持获取实际文件的内容。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这是错误的:

preparedStatment.setBytes(10, inpStream.toString().getBytes());

您将InputStream#toString()的结果存储在数据库中作为字节。 InputStream#toString()不会像您想象的那样返回文件的内容,而是返回从Object#toString()继承的默认classname@hashcode表示。

您需要PreparedStatement#setBinaryStream()代替:

preparedStatement.setBinaryStream(10, inpStream);

然后您可以通过ResultSet#getBinaryStream()检索它:

InputStream inpStream = resultSet.getBinaryStream("columnname");

或者,如果确实需要PreparedStatement#setBytes(),那么您需要先按常规方式将InputStream写入ByteArrayOutputStream,然后按以下方式获取字节数它的toByteArray()方法。但这本身并不具有记忆效率。