我已将文件作为字节数组插入MySQL数据库:
preparedStatment.setBytes(10, inpStream.toString().getBytes());
我已经将数据库中的文件作为字节数组获取,但我仍然坚持获取实际文件的内容。这样做的正确方法是什么?
答案 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()
方法。但这本身并不具有记忆效率。