Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm trying to display images retrieve from MySQL database of blob datatype. Could not figure out what is the problem that causes the image column to display data like this [B@29b8e4f7 instead of image icon.

DefaultTableModel model = new DefaultTableModel(new Object[]{
    "image", "item_name", "quantity","price", "category", "color", "size"}, 0){
        @Override
        public Class<?> getColumnClass(int column) {
            switch(column){
                case 0: return ImageIcon.class;
                default: return String.class;
            }
        }
    };

    myTable.setModel(model);

...

         ResultSet rs = database.getRS();

            int columns = rs.getMetaData().getColumnCount();

            while(rs.next()){
                Object[] row = new Object[columns];
                for(int i = 1; i <= columns; i++){                        
                    row[i-1] = rs.getObject(i);

                }
                DefaultTableModel defmodel = (DefaultTableModel) tableItem.getModel();
                defmodel.insertRow(rs.getRow()-1, row);

            }
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
259 views
Welcome To Ask or Share your Answers For Others

1 Answer

Since you used preparedstatement.setBlob(1, InputStream); to store the image, I have to assume that you stored the physical image file/format and not just the pixel data.

You need to read back this image format and convert to a supported image format for Swing/Java.

Start by getting a Blob reference to the database field...

Blob blob = rs.getBlob(1);

Once you have a Blob, you can use it's binary InputStream and read the data...

BufferedImage image = null;
try (InputStream is = blob.getBinaryStream()) {
    image = ImageIO.read(is);
} catch (IOException exp) {
    exp.printStackTrace();
}

Now, you can make it an ImageIcon using new ImageIcon(image) and put this within your table model...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...