2013-03-15 37 views
0

我在MySQL的有BLOB類型字段,我想把數據在這一領域JLabel爲圖標。例如,這個JLabel將以我的形式成爲用戶的個人資料圖片。的MySQL的blob的Netbeans的JLabel

我用這個代碼,但沒有任何反應 ,也是我想fix to width或在我的JLabel修復任何圖像大小

DefaultTableModel pic = MyDB.DataTable("SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'"); 
    if (pic.getRowCount() > 0){ 
     Blob blob = pic.getBlob(1); 
     byte[] image1 = blob.getBytes(1, ALLBITS); 
     ImageIcon image = new ImageIcon(image1); 
     picture.setIcon(image); 
     getContentPane().add(picture); 
     setVisible(true); 
    } 

picture是我的JLabel的名稱

+3

調試代碼中的每一行。檢查你得到的行數,檢查'blob'是否爲空,檢查檢索的字節是否正常,檢查'image'是否被創建(非null和width/height> 0)。 – StanislavL 2013-03-15 08:03:05

+0

我'如果(pic.getRow()== 1)'等於0 – kelvzy 2013-03-18 01:10:37

+0

但我的SQL語句是正確的@StanislavL – kelvzy 2013-03-18 02:19:50

回答

1

我 我的文件名應該是這樣的

txtPicPath.setText(file.getAbsoluteFile().toString()); 

,我用這些代碼,並且還與JLabel的一刀切

ResultSet rst = MyDB.rsFetch("SELECT `Picture` FROM `photo` WHERE `Employee ID` = '"+ Data.User.getText()+"'"); 
     while (rst.next()) { 
     Blob filenameBlob = rst.getBlob("Picture"); 
     byte[] content = filenameBlob.getBytes(1L,(int)filenameBlob.length()); 
     ImageIcon ik = new ImageIcon(content); 
     Image img = ik.getImage(); 
     Image newimg = img.getScaledInstance(Data.picture.getWidth(), Data.picture.getHeight(), java.awt.Image.SCALE_SMOOTH); 
     ik = new ImageIcon(newimg); 
     Data.picture.setIcon(ik); 
     } 
1

使用resultset

Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'"); 

你可以從

0改變
Blob blob = rs.getBlob(1); 

InputStream binaryStream = rs.getBinaryStream(1); 

你可以參考從這裏博客獲取圖像的官方指南另一altenative http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/blob.html

+0

不,我不能使用resultset原因我試過了,我總是有用戶連接錯誤,因爲我在這裏有100多臺電腦 – kelvzy 2013-03-20 04:26:52

+0

這就是問題 – kelvzy 2013-03-20 05:47:10

0

斑點具有getBinaryStream(),它返回一個包含字節流存儲在blob中的數據。

的ImageIcon,它實現了圖標,有一個構造這需要一個字節數組作爲參數。

的JLabel具有的setIcon(圖標)方法。

label.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream()))); 
0

嘗試:

picture.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream()))); 
6

第一:從您的數據庫返回輸入流:

String query = "SELECT `Picture` FROM `photo` WHERE `Employee ID` = 'EQ0103'"; 
stmt = (PreparedStatement) con.prepareStatement(query); 
ResultSet result = stmt.executeQuery(); 

返回的圖像從數據庫

BufferedImage im = ImageIO.read(result.getBinaryStream(1)); 

然後讓rezise這個圖片:

im =linearResizeBi(im, /*width*/, /*height*/); 

linearResizeBi方法:

static public BufferedImage linearResizeBi(BufferedImage origin, int width, int height) { 
     BufferedImage resizedImage = new BufferedImage(width, height ,BufferedImage.TYPE_INT_RGB); 
     Graphics2D g = resizedImage.createGraphics(); 
     float xScale = (float)width/origin.getWidth(); 
     float yScale = (float)height/origin.getHeight(); 
     AffineTransform at = AffineTransform.getScaleInstance(xScale,yScale); 
     g.drawRenderedImage(origin,at); 
     g.dispose(); 
     return resizedImage; 
    } 

然後進行圖像是一個圖標:

ImageIcon image1 = new ImageIcon(im);

然後將圖標添加到的JLabel:

picture.setIcon(image); 
getContentPane().add(picture); 
setVisible(true);