MySQL blob到Netbeans JLabel

我的MySQL中有一个blob类型的字段,我想将数据放在JLabel中的这个字段中作为Icon。 例如,这个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的名字

第一步:从数据库返回输入流:

 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)); 

然后重新调整此图像:

 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); 

使用结果集

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

你可以改变

 Blob blob = rs.getBlob(1); 

另一个人的

 InputStream binaryStream = rs.getBinaryStream(1); 

您可以参考博客中获取图像的官方指南http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/blob.html

我的文件名应该是这样的

  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); } 

Blob有一个getBinaryStream(),它返回包含存储在blob中的数据的字节流。

ImageIcon实现了Icon,它有一个构造函数,它接受一个byte数组作为参数。

JLabel有一个setIcon(Icon)方法。

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

尝试:

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