我已经插入一个文件到MySQL数据库作为字节数组:
preparedStatment.setBytes(10, inpStream.toString().getBytes());
我已经从数据库中获得了文件作为字节数组,但我被困在获得实际文件的内容。正确的做法是什么?
这是错误的:
preparedStatment.setBytes(10, inpStream.toString().getBytes());
您将InputStream#toString()
的结果以字节形式存储在DB中。InputStream#toString()
不像你想的那样返回文件的内容,相反,它返回从Object#toString()
继承的默认classname@hashcode
表示。
你需要PreparedStatement#setBinaryStream()
代替:
preparedStatement.setBinaryStream(10, inpStream);
则可以通过ResultSet#getBinaryStream()
:
InputStream inpStream = resultSet.getBinaryStream("columnname");
或者如果真的需要PreparedStatement#setBytes()
,那么您需要先以通常的方式将InputStream
写入ByteArrayOutputStream
,然后通过toByteArray()
方法获取字节。但这本身并不节省内存。