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