在JTable的单个列上显示MySQL数据库中的图像

我正在尝试显示从blob数据类型的MySQL数据库中检索的图像。 无法弄清楚导致图像列显示数据的问题是什么[B@29b8e4f7而不是图像图标。

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

既然你使用了preparedstatement.setBlob(1, InputStream); 为了存储图像,我必须假设您存储了物理图像文件/格式而不仅仅是像素数据。

您需要回读此图像格式并转换为Swing / Java支持的图像格式。

首先获取数据库字段的Blob引用…

 Blob blob = rs.getBlob(1); 

一旦你有一个Blob ,你可以使用它的二进制InputStream并读取数据……

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

现在,您可以使用new ImageIcon(image)将其设置为ImageIcon ,并将其放入表模型中…