Получение вставленного файла из байтового массива MySQL к реальному содержимому файла - PullRequest
0 голосов
/ 03 января 2012

Я вставил файл в базу данных MySQL в виде байтового массива:

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

Я уже получил файл из базы данных в виде байтового массива, но я застрял при получении реального содержимого файла. Как правильно это сделать?

1 Ответ

1 голос
/ 03 января 2012

Это неправильно:

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

Вы сохраняете результат InputStream#toString() как байты в БД. InputStream#toString() не возвращает содержимое файла, как вы думаете, вместо этого он возвращает представление classname@hashcode по умолчанию, унаследованное от Object#toString().

Вам нужно PreparedStatement#setBinaryStream() вместо:

preparedStatement.setBinaryStream(10, inpStream);

Затем вы можете получить его по ResultSet#getBinaryStream():

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

Или, если вам действительно нужно PreparedStatement#setBytes(), вам нужно сначала записать InputStream в ByteArrayOutputStream обычным способом, а затем получить байты по toByteArray() метод. Но это не эффективно для памяти.

...