2012-01-03 2 views
0

я вставил файл в базу данных MySQL в виде массива байт:Получение вставленного файла из MySQL байт массива фактических содержимого файла

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

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

+1

Байт, полученный вами из базы данных *, - это * содержимое файла. Или мне что-то не хватает? –

+0

Точно, это файл изображения или PDF-документа или что-то в этом роде? Или вы пытаетесь прочитать текст? – Pace

ответ

1

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

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

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

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

preparedStatement.setBinaryStream(10, inpStream); 

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

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

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

+0

Спасибо за ваш повтор, это поможет мне –

Смежные вопросы