2015-05-27 2 views
0

Я пытаюсь загрузить изображение, которое находится в базе данных MySQL, как формат данных blob ([[email protected]), но я не могу загрузить его в JLabel, как показано ниже. Он показывает, что ByteArrayInputStream пуст.ByteArrayInputStream() показывает null

byte[] bytesl = null; 

ResultSet rs = DB.DB.search("select image from imageio where id = '2'"); 
while (rs.next()) { 
    bytesl = rs.getBytes(1);    
} 
BufferedImage imag = ImageIO.read(new ByteArrayInputStream(bytesl)); 

Image img = imag; 

img = img.getScaledInstance(jLabel1.getWidth(), jLabel1.getHeight(), 
          Image.SCALE_SMOOTH); 
jLabel2.setIcon(new ImageIcon(img)); 
+0

Какой тип 'DB'? Хорошим началом было бы положить оператор печати во время цикла (или отладить ваш код), чтобы увидеть, если он когда-либо там. Не должен влиять на ваш результат, но если цикл while должен выполняться не более одного раза (я предполагаю ...), вы, вероятно, не должны использовать цикл while (утверждение if приходит на ум как лучшее идея). – Dukeling

+0

Вы подтвердили, что в столбце и строке есть данные? – MadConan

+0

вы, я проверил с sout ... [B @ e96bf это wht я получил для байтов, я должен его декодировать? –

ответ

0

Я думаю, что код не переходит в цикл while, потому что нет таких записей с таким запросом. Скорее всего, проблема заключается в «знаках вокруг 2. Обычно идентификатор - это число, но в вашем запросе это похоже на то, что вы сравниваете его со строкой. Попробуйте удалить апостроф знаки вокруг 2.

+0

Это просто запрос mysql ... найденная проблема: я получаю значение null для ImageIO.read (новый ByteArrayInputStream (bytesl)) –

+0

Вы пробовали свой SQL-запрос в командной строке базы данных? –

+0

no mate в базе данных нет проблем. Есть 2 столбца. id (int), image (blob) –

0
fileContent = Files.readAllBytes(f2.toPath()); 
DB.DB.statement("insert into imageio (image) values ('" + fileContent + "')"); 

Вы только вставить строку [[email protected]в базу данных. ImageIO не может превратить это в изображение, поэтому он возвращает null.

Вы должны хотя бы использовать PreparedStatement и предоставить данные в качестве аргумента. Вы действительно должны использовать Blob и входной поток здесь.

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