MySQL blob to Netbeans JLabel

梦想的初衷 提交于 2019-11-29 13:08:24

First : Return the Input stream from your database :

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

Returned image from Database

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

Then make rezise to this image :

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

linearResizeBi Method :

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

then make the image is an Icon:

ImageIcon image1 = new ImageIcon(im);

then add the Icon to The Jlabel :

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

Use a resultset

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

You may change from

Blob blob = rs.getBlob(1);

to another altenative of

InputStream binaryStream = rs.getBinaryStream(1);

You can refer to the official guide of getting image from a blog here http://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/blob.html

I got my filename should be like this

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

and i used these codes, and also it fits with the jlabel size

 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 has a getBinaryStream() which returns a stream of bytes containing the data stored in the blob.

ImageIcon, which implements Icon, has a constructor which takes a byte array as argument.

JLabel has a setIcon(Icon) method.

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

Try:

picture.setIcon(new ImageIcon(ByteStreams.toByteArray(blob.getBinaryStream())));
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!