2015-05-27 62 views
0

我想加載一個在MySQL數據庫中的圖像作爲blob數據格式([[email protected]),但我無法將其加載到JLabel中,如下所示。它顯示ByteArrayInputStream是空的。ByteArrayInputStream()顯示爲空

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循環最多隻能執行一次(我假設...),你可能不應該使用while循環(if語句會讓人想起更好理念)。 – Dukeling

+0

您是否驗證了列和行有數據? – MadConan

+0

你我用一個sout驗證過... [B @ e96bf這是我得到的bytesl我必須解碼它嗎? –

回答

0

我覺得你的代碼不會去while循環,因爲沒有這樣的查詢記錄。最可能的問題是'2左右的標誌。通常id是一個數字,但在您的請求中,它看起來像是將它與字符串進行比較。嘗試刪除2左右。

+0

這只是mysql查詢...發現問題是我爲ImageIO.read(新ByteArrayInputStream(bytesl))獲得空值) –

+0

您是否在數據庫的命令行中嘗試了SQL查詢? –

+0

沒有隊友在數據庫中沒有問題..有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和一個輸入流。